你原来的错误是因为你指的是类型名称本身,而不是它的Class
;得到一个类型的Class
对象,请使用.class
,例如:
type.getClass().equals(ClassA.class)
您可以只使用instanceof
,例如:
for (Types type : typeList) {
if (type instanceof ClassA || type instanceof ClassB) {
counter ++;
}
}
顺便说一句,getClass().equals(...)
不等同于instanceof
;因为你想要使用ClassA.class.isAssignableFrom(type.getClass())
。或者,如果它在语义上有意义,则可以让对象公开属性以确定它们是否应该被计数,例如,:
// Base, for example:
public abstract class Types {
abstract public boolean isInteresting();
}
// Then:
public ClassA extends Types {
@Override public boolean isInteresting() { return true; }
}
public ClassB extends Types {
@Override public boolean isInteresting() { return true; }
}
public ClassC extends Types {
@Override public boolean isInteresting() { return false; }
}
// Later:
int countInterestingObjects (ArrayList<Types> typeList) {
int counter = 0;
for (Types type : typeList) {
if (type.isInteresting()) {
counter ++;
}
}
return counter;
}
我想你正在寻找'Class'类的'isAssignableFrom'方法。它告诉你一个类或接口是否是另一个类的超类型。你是这个意思吗?如果没有,请澄清你的问题。 –