您最初的错误是因为您指的是类型名称本身,而不是它的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;
}