いくつかの異なる型のパラメーターを受け入れることができるオーバーロードされたメソッドがJavaにありnull
、そのメソッドに渡したい場合は、受け入れられた型の1つに明示的にキャストする必要があることを知っています。私の質問は、null
メソッド自体の中から呼び出されるメソッドのバージョンを選択することは可能ですか(たとえば、を処理するために別のオーバーロードを追加することによってnull
)?
私の問題は次のとおりです-1つのパラメーターを受け入れるオーバーロードされたコンストラクターを持つクラスがあります:
public class MyClass {
public MyClass(A arg) {
// do something
}
public MyClass(B arg) {
// do something else
}
}
ユースケースは、クラスがで構築されている場合、コンストラクターnull
の2番目のバージョンのみが意味をなすようなものです。しかし、new MyClass((B)null)
毎回やらなければならないことはエラーが発生しやすいです。誤ってキャストを使用するとA
、間違ったコンストラクターが実行されます。A
また、コンストラクターに次のチェックを導入することもできません。
if (arg == null) {
this((B)arg);
}
this(...)
は最初のステートメントではないからです。もちろん、B
このチェック内でコンストラクターからコードを複製するか、コンストラクターが行うことを実行する別のメソッドを導入して、コンストラクB
ター内とこのチェック内の両方から呼び出すことができますが、これは「クリーン」ではないようです。解決策(たとえば、カスケードコンストラクターの場合など、常に可能であるとは限りません)。
new MyClass(null)
コンストラクターのB
バージョンを毎回実行するだけでよい方法はありますか?
このオーバーロードを追加しようとしましたが、コンパイラが文句を言いました。
public MyClass(null arg) {
this((B)arg);
}