如果参数是列表中类的实例,我想返回true
。这是我的片段:
private Class[] classes;
public boolean belongsToList(Object obj){
return Arrays.asList(classes).contains(obj.getClass());
}
但是当类列表包含obj类的超类而不是确切的子类本身时,此代码返回false。
如何让true
中某个元素的子类的实例返回classes
?
答案 0 :(得分:1)
使用classes
的流,其谓词基于Class#isInstance()
:
public boolean belongsToList(Object obj) {
return Arrays.stream(classes).filter(c -> c.isInstance(obj)).findFirst().isPresent();
}
在内部,处理在第一场比赛时暂停/返回,因此效率很高。
答案 1 :(得分:0)
没有办法以某种方式迭代类数组(使用经典循环或Java 8流)。你可以这样做:
public static boolean belongsToList(Class<?> obj){
for (Class<?> clazz : classes) {
if (clazz.isAssignableFrom(obj)) {
return true;
}
}
return false;
}
或者,如果你需要知道obj是否是一个类实例:
public static boolean belongsToList(Object obj){
for (Class<?> clazz : classes) {
if (clazz.isInstance(obj)) {
return true;
}
}
return false;
}
答案 2 :(得分:0)
您可以使用instanceof运算符
boolean belongsToList(Object my_obj) {
for (Object o : classes) {
if (my_obj instanceof o)
return true;
}
return false;
}