質問: Javaのオーバーロードの使い方についての質問です。 オーバーロードさせたメソッドを変換処理のように使用しています。 これをみて、わざわざオーバーロードさせなくても、引数にNULLを追加すればいいのではないか、 と思いました。 皆さんはどのように思いますか。 以下の例のように、オーバーロード2メソッドを呼び出す際の変換処理に、 オーバーロード1メソッドが用意されています。 ``` public void testController(){ // オーバーロードのメソッドを呼び出す if(dataTimeCheck(sDate, holiday)) { } } // オーバーロード1 public boolean dateTimeCheck(Date sDate, String hodiday){ return dateTimeCheck(sDate, null, hodiday) } // オーバーロード2 public boolean dateTimeCheck(Date sDate, String baseDate, String hodiday){ // 日付判定処理 } ``` 私としては上記の「if(dataTimeCheck(sDate, holiday))」部分を 「if(dataTimeCheck(sDate, null, holiday))」のようにしてしまった方がいいと思います。
回答: このコードが単に"オーバーロードの例としてのコード"という可能性はないでしょうか。 例えば、メソッドとはなにか? の説明として ``` public int add(int a, int b) { return a + b; } ``` というコードを見せられた時に~~「a+bでいいですよね? メソッドって意味あります?」という感想を言っているようなものかと思います~~。 追記 ここは取り消します。よく考えたらこの質問は"オーバーロードの有用性"に関する質問じゃありませんね。 例としてのコードであるなら中身の有用性であれこれ言っても仕方ないでしょう、程度の表現でよかったですね。失礼しました。 追記終わり そうでないとすると、勝手な想定として、 ``` // オーバーロード1 public boolean dateTimeCheck(Date sDate, String hodiday){ return dateTimeCheck(sDate, null, hodiday) } // オーバーロード2 public boolean dateTimeCheck(Date sDate, String baseDate, String hodiday){ // 日付判定処理 if (baseDate == null) { baseDate = なんか初期値; } 処理続く } ``` みたいな実装だとしましょう。 もうひとつ ``` // オーバーロード1 public boolean dateTimeCheck(Date sDate, String hodiday){ // 日付判定処理1 } // オーバーロード2 public boolean dateTimeCheck(Date sDate, String baseDate, String hodiday){ // 日付判定処理2 } ``` というような実装を考えましょう。 この2つは**同じじゃありません**。 上の実装だと`dataTimeCheck(sDate, null, holiday)`と呼び出しても 第2引数のnullに対してNullPointerException がでる余地が**ありません**が、下の実装だと NullPointerException がでる可能性があります。 というか、呼び出し方が不適切だった時には NullPointerException のエラーで**正しく異常停止する**実装の方がより安全です。 `dataTimeCheck(sDate, null, holiday)`でもいいという判断には、不適切なことをしたら正しく停止する方が安全、という発想がありませんね。 ダメな実装例を見ていて「これじゃ意味なくない?」と正しく判断している可能性もあって、それならそれで「その感覚は正しいです」という回答でもあります。