2016-04-04 41 views
0

Her şeyden önce, bu soru zaten yanıtlanabilir, ancak aramalarım bana gerçekten bir şey söylemedi ve aslında ne aradığımı bilmiyorum her neyse.Başka bir sınıf nesnesiyle karşılaştırmak için sınıf nesneleri listesi oluşturma

Temelde, sınıf nesnelerinin bir List oluşturmanız gerekir (yalnızca saklamak sınıf/başlatılmamış nesneler konulmamalıdır - gerçekten nasıl açıklayacağımı bilmiyorum) ve (instanceof ala) başka sınıf nesnesine karşılaştırın. Ama bunun nasıl yapılacağını bilmiyorum. Ait "something1 yönettiği" Bir List ile

if(something1 instanceof something2) 

böyle içinden yineleme edebilmek için:

ben bunu yapmak istiyorum:

Bir Örnek olurdu

for(int i= 0 ; i <= list.size; i++) 
{ 
    if (list.get(i) instanceof something2) 
    doSomething(); 
} 

bu yüzden temel listede nasıl bir şey yapabilmem gerektiğini bilmek zorundayım.

Bu mümkün mü?

Umarım bu biraz anlaşılabilir.

+0

Evet öyle.Jenerik listeleri bir "Class" sınıfı kullanın, List class = new ArrayList (); – marcellorvalle

cevap

1

sınıf tam olarak aynı ise, bu yöntem kontrol edecektir.

Yani önce (eğer sınıfları Foo ve Bar olduğunu varsayarak ve bir liste List<Class> olan) bir listede sınıfları koyun:

list.add(Foo.class); 

Ve sonra üzerine yineleme ve böyle bir karşılaştırma yapın:

if (list.get(i).equals(Bar.class)) 
    doSomething(); 
+0

tam olarak neye ihtiyacım vardı! Teşekkürler :) –

0

Class sınıf çek gibi instance of yapmak için API sağlar: Sen equals() yöntemini kullanarak sınıfları karşılaştırabilirsiniz

Class numClass = Number.class; 
List<Class> classes = Arrays.asList(Integer.class); 
... 
if (numClass.isAssignableFrom(classes.get(i))) { 
    doSomething(); 
} 
0

jenerik listeleri ve sınıf class Kullanımı:

List<Class> classes = new ArrayList<Class>(); 
classes.add(Integer.class); 
classes.add(String.class); 
classes.add(MyClass.class); 
//... 

for (Class myClass : classes) { 
    if (myClass.equals(MyOtherClass.class)) { 
     doSomething(); 
    } 
} 
0

Sınıfların listesi, List<Class> list, örn. Test etmek istiyorsanız

List<Class> classes = Arrays.asList(String.class, Number.class); 
Class testedClass = Integer.class; 

kesin sınıflar eşitlik equals kullanın.

for (Class clazz : list) { 
    if (clazz.equals(testedClass)) { 
     doSomething(); 
    } 
} 

Ya

if (list.contains(testedClass)) { 
    doSomething(); 
} 

daha kısa Ama instanceof bir analog gerekiyorsa o zaman isAssignableFrom

for (Class clazz : list) { 
    if (clazz.isAssignableFrom(testedClass)) { 
     doSomething(); 
    } 
} 

isAssignableFromclazz ve testedClass aynı hiyerarşi içinde ve testedClass uzanır veya demektir kullanmak class

’e eşittir