2012-02-19 13 views

cevap

9

Tüm Java Nesneler Nesne sınıfını genişletir.

public void func(Object[] args) { 
} 

Yoksa mümkün istiyorum eğer hiçbir şey geçmek: Yani fonksiyon nesne dizisi kabul yapabilir alırsınız en yakın someMethod(Object ... args) olduğunu

public void func(Object... args) { 
} 
5
public void omnivore(Object... args) { 
    // what now? 
} 

, herhangi bir referans türü da karakterler, nesne türü bir parametreye geçirilebilir bir genel tipte olanlar da dahil olmak üzere (nesneleri ve diziler), bir değişken. Herhangi bir ilkel türden bir değişken, bir referans tipi olan karşılık gelen sarmalayıcı türüne otomatik olarak kaydedilebilir ve böylece Nesne olarak geçirilebilir. Yani, Object... herhangi bir sayıyı kabul edecektir.

3

kullanın bu sözdizimi:

void myMethod(Object... args) { 
    // Here, args is an array of java.lang.Object: 
    // you can take its length, get its elements with [i] operator, 
    // and so on. 
} 
1

.

Bu, tüm bağımsız değişken türlerini kabul etmez. Spesifik olarak, ilkel türleri kabul etmez: bu ihtiyaçlar ilgili sarmalayıcı tiplerine göre kutulanır. Normalde bu hiç fark etmez. Ancak, çağrılan yöntemdeki ilkel ve sarmalayıcı türleri arasında ayrım yapmanız gerekiyorsa bunu yapar.

+0

Cevabınız için teşekkürler. Aslında, önerdiğiniz 'someMethod (Object ... args) ile deniyorum ve hem ilkel hem de nesne türlerini geçmekte sorun yok gibi görünüyor. Bunu bir test olarak kullandım ve hiç hata yapmadim: 'someMethod (99, 1.23," A String ", yeni String (" A Wrapper String "), anObject); ama Java belki de benim için ilkelleri sarar. bilir :) –

+1

@fleawhale - bu ** sizin için onları sarma (autoboxing). Ama benim amacım, aranan yöntemin, arayanın, sarıcı nesneyi açıkça temin ettiği durumdan otomatik kutulanan bir ilkel değer sağladığı durumları ayırt edememesidir. –

+0

Şerefe, bu şimdi mantıklı! –

İlgili konular