2010-10-26 14 views
5

Aşağıdaki örnekte, 2 kurucu var: bir String alan ve özel bir nesne alan bir. Bu özel nesnede, bir String döndüren bir "getId()" yöntemi vardır.Boş bırakılırken hangi kurucu seçilir?

public class ConstructorTest { 
private String property; 

public ConstructorTest(AnObject property) { 
    this.property = property.getId(); 
} 

public ConstructorTest(String property) { 
    this.property = property; 
} 

public String getQueryString() { 
    return "IN_FOLDER('" + property + "')"; 
} 
} 

Kurucuya null iletirseniz, hangi kurucu seçilir ve neden seçilir? Benim testimde String kurucu seçildi, ancak bunun her zaman böyle olup olmayacağını bilmiyorum.

Umarım birileri bana bu konuda biraz bilgi verebilir.

Şimdiden teşekkürler.

cevap

12

:

ConstructorTest test = new ConstructorTest(null); 

derleyici belirten şikayet:

yapıcı ConstructorTest (anObject) belirsiz.

JVM o yapıcı maçları argüman tür bilgilerle değil yaptığı gibi çağırmak için hangi yapıcı seçemezsiniz (Bakınız: 15.12.2.5 Choosing the Most Specific Method).

Sen gibi parametreyi typecasting tarafından spesifik yapıcısı arayabilirsiniz:

ConstructorTest test = new ConstructorTest((String)null); 

veya

ConstructorTest test = new ConstructorTest((AnObject)null); 

Güncelleme: @OneWorld için sayesinde kısmındaki tarih bağlantısına kadar (ilgili Yazma zamanı) here'a erişilebilir.

+0

Haklısın, testimde bir hata yaptım, bu yüzden derleyici hatası ortaya çıkmadı. –

+0

döküm, kim bilir! –

+0

link is death; ( – OneWorld

0

Java, argümanlara göre bulabileceğiniz en özgün çalışmayı kullanır.
PS: kurucu (InputStream) eklerseniz, derleyici belirsizlik nedeniyle hata atar - daha spesifik olanı bilemez: String veya InputStream, çünkü bunlar farklı sınıf hiyerarşisinde. Bunu yaparak

+0

Kesinlikle yanlış. Size bu cevabı düşürme yükünü kurtaracağım. –

+0

Neden değil? Söyleyecek bir şey varsa lütfen açıklayın. – foret

+0

Mesajımı gör .... –

3

Derleyici, hata üretecektir.

+0

Daha ayrıntılı çalışmalısınız. –

+0

Haklısın, testimde bir hata yaptım, bu yüzden derleyici hatası ortaya çıkmadı. –

İlgili konular