如何检查元素是否是类列表中元素的子类

时间:2015-12-07 12:58:00

标签: java arrays class oop

如果参数是列表中类的实例,我想返回true。这是我的片段:

private Class[] classes;

public boolean belongsToList(Object obj){
  return Arrays.asList(classes).contains(obj.getClass());
}

但是当类列表包含obj类的超类而不是确切的子类本身时,此代码返回false。

如何让true中某个元素的子类的实例返回classes

3 个答案:

答案 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;
}