0

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

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

一个例子是:

我想做这个:

if(something1 instanceof something2)

使用List“something1”,能够像这样遍历它:

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

所以我基本上需要知道如何/我必须在实际列表中存储什么才能执行类似的操作。

这可能吗?

我希望这有点可以理解。

4

4 回答 4

1

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

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

list.add(Foo.class);

然后你迭代它并像这样进行比较:

if (list.get(i).equals(Bar.class))
    doSomething();
于 2016-04-04T19:54:17.107 回答
0

Class类提供 API 来做instance of类似的检查:

Class numClass = Number.class;
List<Class> classes = Arrays.asList(Integer.class);
...
if (numClass.isAssignableFrom(classes.get(i))) {
    doSomething();
}
于 2016-04-04T19:52:36.643 回答
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(); 
    }
}
于 2016-04-04T19:57:42.803 回答
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();
}

但是如果你需要一个类似的instanceofthen 使用isAssignableFrom

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

isAssignableFrom表示clazztestedClass位于同一层次结构中并且testedClass扩展或等于class

于 2016-04-04T20:10:55.533 回答