2016-04-04 8 views
0

Zuerst, tut mir leid, diese Frage könnte schon beantwortet werden, aber meine Suchen haben mir nichts wirklich gesagt und ich weiß nicht wirklich, was ich suche für sowieso.Erstellen einer Liste von Klassenobjekten, um sie mit einem anderen Klassenobjekt zu vergleichen

Grundsätzlich, ich brauche ein List von Klassenobjekten erstellen (nur speichert die Klasse/nicht initialisiert Objekte speichert - nicht wirklich wissen, wie zu erklären) und vergleichen sie mit einem anderen Klassenobjekt (ala instanceof). Aber ich habe keine Ahnung, wie ich das machen soll.

Ein Beispiel wäre:

Ich möchte, dies zu tun:

if(something1 instanceof something2) 

mit einem List von "something1 ist", durch das so iterieren zu:

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

Also muss ich im Grunde wissen, wie/was ich in der tatsächlichen Liste speichern muss, um etwas in der Lage zu sein.

Ist das möglich?

Ich hoffe, das ist etwas verständlich.

+0

Ja ist es.Verwenden Sie generische Listen und die Klasse "Class", so etwas wie Liste classes = new ArrayList (); – marcellorvalle

Antwort

1

Sie Klassen vergleichen können equals() Methode, diese Methode überprüfen, ob die Klasse genau das gleiche ist.

So setzen Klassen in einer Liste zuerst (Sie haben Klassen Foo und Bar vorausgesetzt und eine Liste ist List<Class>):

list.add(Foo.class); 

Und dann iterieren Sie über sie und tun Vergleich wie folgt aus:

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

das ist genau das, was ich brauchte! Vielen Dank :) –

0

Class Klasse stellt API instance of wie Scheck zu tun:

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

Die Verwendung generische Listen und Klasse Klasse:

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

Liste von Klassen kann als List<Class> list deklariert werden, z.B.

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

Wenn Sie die genaue Klassen Gleichheit equals verwenden testen möchten.

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

Oder noch kürzer

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

Aber wenn man ein Analogon von instanceof dann isAssignableFrom

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

isAssignableFrom bedeutet verwenden müssen, dass clazz und testedClass in derselben Hierarchie sind und testedClass erstreckt oder entspricht class