Nasıl aşırı bir yöntem değişmezini parametre null değeri seçilir?
Bir sınav bu soru ile karşılaştım
public class MoneyCalc {
public void method(Object o) {
System.out.println("Object Verion");
}
public void method(String s) {
System.out.println("String Version");
}
public static void main(String args[]) {
MoneyCalc question = new MoneyCalc();
question.method(null);
}
}
Bu programın çıktısı "". String Sürüm Ama aşırı bir yöntem boş bir dize geçirmeden sürümü seçti anlamak mümkün değildi. Boş bir Dize değişkeni bir şey işaret ediyor ?
Ancak kodu deÄŸiÅŸtirildiÄŸinde,
public class MoneyCalc {
public void method(StringBuffer sb) {
System.out.println("StringBuffer Verion");
}
public void method(String s) {
System.out.println("String Version");
}
public static void main(String args[]) {
MoneyCalc question = new MoneyCalc();
question.method(null);
}
}
derleme hatası diyerek verir "yöntemi yöntemi(StringBuffer) türü MoneyCalc için belirsiz"
CEVAP
BoÅŸ bir Dize deÄŸiÅŸkeni bir ÅŸey iÅŸaret ediyor ?
Boş bir başvuru herhangi bir sınıf türü bir ifadeye dönüştürülebilir. String, Bu durumda gayet iyi:
String x = null;
String aşırı burada Java derleyici alır çünkü seçiliren özelaşırı section 15.12.2.5 of the JLS olarak başına. Özellikle:
Kayıt dışı sezgi bir yöntem varsa çağırma ilk yöntem tarafından ele derleme zamanı tür hatası olmadan diğerini geçme diye bir daha özel olmasıdır.
Senin ikinci durumda, her iki yöntem hala geçerli, ama ne String ne StringBuffer daha özel daha başka, bu nedenle her iki yöntem olduğunu daha çok belli diğer, dolayısıyla derleyici hata.

Yöntem NULL parametre için Aşırı yükle...
Nasıl URL parametre değeri olsun?...
Nasıl (javascript) dizi değeri boş vey...
NuGet Paketi geri proje Çeşitli Dosyal...
Nasıl Java null olmayan ilk değeri alm...