SORU
23 EKİM 2012, Salı


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
23 EKİM 2012, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006
  • psidot

    psidot

    2 Kasım 2006
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007