2016-04-04 41 views
0

首先,很抱歉,這個問題可能已經回答了,但我的搜索沒有真正告訴我任何東西,我真的不知道我在搜索什麼無論如何。基本上,我需要創建類對象的List(只存儲類/不存儲初始化對象 - 不知道如何解釋),並將它們與另一個類對象(ala instanceof)進行比較。但我不知道如何做到這一點。創建一個類對象列表來比較它們與另一個類對象

一個例子是:

我想這樣做:

if(something1 instanceof something2) 

與 「something1的」 一List,要能來遍歷它是這樣的:

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

所以我基本上需要知道如何/我必須在實際列表中存儲以便能夠做到這一點。

這可能嗎?

我希望這有點可以理解。

+0

是的。使用泛型列表類「Class」,類似於列表 classes = new ArrayList (); – marcellorvalle

回答

1

您可以比較使用equals()方法類,此方法將檢查類是完全一樣的。

所以,你首先把類列表中(假設你有類FooBar和列表List<Class>):

list.add(Foo.class); 

然後你遍歷它,做這樣的對比:

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

這就是我所需要的!謝謝 :) –

0

Class類提供API做instance of象檢查:

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

使用泛型列表和類類:

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

類的列表可以被聲明爲List<Class> list,例如,

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

如果你想測試確切的類相等使用equals

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

甚至更​​短的

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

但是如果你需要的instanceof模擬然後用isAssignableFrom

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

isAssignableFrom意味着clazztestedClass處於同一層次和testedClass延伸或等於class

相關問題