いくつかの異なる型のパラメーターを受け入れることができるオーバーロードされたメソッドが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);
}