通常、複数のオーバーライドされたバージョンが適用されるコンストラクタまたはメソッドを呼び出すと、Javaは最も具体的なコンストラクタまたはメソッドを選択します。 Java言語仕様書のSection 15.12.2はこれを詳細に説明している。あなたはこれらの方法が適用され、両方の、method(null)
を呼び出すと
public void method(Object o) {
// ...
}
public void method(String s) {
// ...
}
:
は、あなたがこのような2つのオーバーロードされたメソッドを、持っていると仮定します。 Javaは最も具体的なものを選択します。この場合は2番目の方法ですが、String
はObject
よりも具体的なタイプなので、String
が必要です。
ただし、最も具体的なコンストラクタまたはメソッドを特定できないことがあります。私たちは一つの引数を取るクラスString
のコンストラクタを見れば:
そこ種類
byte[]
、
char[]
、
String
、
StringBuffer
と
StringBuilder
の間には階層がありませんので、それはこれらの1つを言うことができないということ
String(byte[] bytes)
String(char[] value)
String(String original)
String(StringBuffer buffer)
String(StringBuilder builder)
注意コンストラクタは他よりも具体的です。したがって、Javaコンパイラはどのコンストラクタを選択するのかわからず、エラーが発生します。ただ、解決に多くの明快さを追加する
実行しようとすると、 'StringBuffer'の' NullPointerException'を取得する必要があります(もちろん、それはポイントの横です)。 – BoltClock
http:// stackoverflowを見てください。com/questions/1545501/which-overload-will-get-selected-for-null-in-java – pingw33n