创建一个类对象列表,将它们与另一个类对象进行比较

时间:2016-04-04 19:48:18

标签: java list loops instanceof forge

首先,抱歉,这个问题可能已经回答了,但是我的搜索并没有真正告诉我任何事情,而且我真的不知道我在寻找什么。

基本上,我需要创建一个List类对象(只存储类/不存储已初始化的对象 - 实际上不知道如何解释)并将它们与另一个类对象进行比较(ala { {1}})。但我不知道该怎么做。

一个例子是:

我想这样做:

instanceof

使用if(something1 instanceof something2) 的“something1's”,能够像这样迭代它:

List

所以我基本上需要知道如何/我必须存储在实际列表中才能做出类似的事情。

这可能吗?

我希望这有点可以理解。

4 个答案:

答案 0 :(得分:1)

您可以使用equals()方法比较类,此方法将检查类是否完全相同。

所以你首先把类放在一个列表中(假设你有类FooBar,列表是List<Class>):

list.add(Foo.class);

然后你迭代它并做这样的比较:

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

答案 1 :(得分:0)

Class类提供了执行instance of的API,例如check:

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

答案 2 :(得分:0)

使用通用列表和类Class:

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(); 
    }
}

答案 3 :(得分: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