首先,抱歉,这个问题可能已经回答了,但是我的搜索并没有真正告诉我任何事情,而且我真的不知道我在寻找什么。
基本上,我需要创建一个List
类对象(只存储类/不存储已初始化的对象 - 实际上不知道如何解释)并将它们与另一个类对象进行比较(ala { {1}})。但我不知道该怎么做。
一个例子是:
我想这样做:
instanceof
使用if(something1 instanceof something2)
的“something1's”,能够像这样迭代它:
List
所以我基本上需要知道如何/我必须存储在实际列表中才能做出类似的事情。
这可能吗?
我希望这有点可以理解。
答案 0 :(得分:1)
您可以使用equals()
方法比较类,此方法将检查类是否完全相同。
所以你首先把类放在一个列表中(假设你有类Foo
和Bar
,列表是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
表示clazz
和testedClass
位于同一层次结构中,testedClass
扩展或等于class