2009-04-06 24 views
5

Java'da aşırı yüklü bir kurucu kullanmayı deniyorum. Bu, int[] veya String. Ben derleyici bir null dize veya null dizisi varsa, bu yapıcı çağrısı belirsiz olacağını belirten bir derleme hatası alıyorum.Aşırı yüklenmiş yapıcı belirsizlik

Bu konuda kolay bir yol var mı?

+0

Kayıt için, burada bir cevabı kabul etmedim, çünkü asıl sorum o kadar yanlıştı ki, doğru olanı söylemek zordu. –

cevap

16

Cast türlerinden birine argümanı:

Foo f1 = new Foo((int[]) null); 
// or 
Foo f2 = new Foo((String) null); 
5

kolay yolu - null kaçının. Boşsa String"" kullanın; boş bir int[]new int[] kullanın.

Bir değişkene bir döküm kullanabilir veya boş atayabilir soruyu cevaplamak için: sen hiç bunu yapacağız eğer

new MyClass((String)null) 

final String nullString = null; 
new MyClass(nullString) 

eski genel olarak tercih edilmektedir.

4

Belki de argüman olmadan bir kurucu ekleyebilirsiniz.

+0

girdisi için teşekkürler Null değerinin belirli bir anlamı varsa, muhtemelen en iyi çözüm budur. –

+0

Yeni MyClass ((String) boş) ve yeni MyClass ((int []) null) aynı şeyi ifade eder. (Aşırı çıplak yapıcılar yerine statik oluşturma yöntemlerini çok seviyorum.) –

2

Hazırlamak istediğiniz sınıfın denetimine sahipseniz, iki ayrı ad verebilmeniz ve aşırı yüklenmeyle ilgili karışıklıklardan kaçınmanız için statik bir fabrika yöntemi kullanmayı düşünün.

public static Foo createFromIntArray(final int[] ints) { ... } 
public static Foo createFromString(final String str) { ... } 

Aksi takdirde, boş değerinizin neye uygun olduğuna karar verin: Bu bir null dizisi mi yoksa boş bir dize mi? İnşa ettiğiniz sınıfın, diğeri üzerinde farklı davranması mümkündür. Boş değerinizin neyi temsil ettiğini öğrendikten sonra, kurucuya yapılan çağrıda bu türlere dökün. Eğer açık bir null yerine bu yapıcı bir nesne başvurusu geçen olabilir gibi

new Foo((String) null); 
new Foo((int[]) null); 

Son olarak, bu sesler. Belki de java.util.Map'dan aldığınız bir şey. Eğer öyleyse, bu nesneyi instanceof ile test edebilir ve söz konusu kurucuya göndermeden önce uygun türe yayınlayabilirsiniz.

İlgili konular