创建 class 个对象的列表以将它们与另一个 class 个对象进行比较

creating a list of class objects to compare them with another class object

首先,抱歉,这个问题可能已经有了答案,但我的搜索并没有真正告诉我任何信息,我也不知道我在搜索什么。

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

例如:

我想这样做:

if(something1 instanceof something2)

具有 "something1's" 的 List,以便能够像这样遍历它:

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

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

这可能吗?

我希望这是可以理解的。

Class class 提供 API 做 instance of 像检查:

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

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

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

list.add(Foo.class);

然后你遍历它并像这样进行比较:

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

使用通用列表和 class 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(); 
    }
}

列表 类 可以声明为 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