18

我需要检查:

public static boolean check(Class<?> c, Class<?> d)
{
    if (/* c inherits from d */)
        return true;
    else
        return false;
}

我怎样才能做到这一点 ?

没有这可能c.newInstance()吗?


标题第一次写错了。现在它是正确的。

4

6 回答 6

34

利用isAssignableFrom

if(d.isAssignableFrom(c)){
    // then d is a superclass of c
    // in other words, c inherits d
}

确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回 true;否则返回false。如果此 Class 对象表示原始类型,则如果指定的 Class 参数正是此 Class 对象,则此方法返回 true;否则返回false。

资源

于 2013-04-25T08:53:44.163 回答
3

Class中有一个方法叫Class #isInterface()

 if (c.isInterface())
            return true;
于 2013-04-25T08:52:11.600 回答
2

试试这个

if(c.isAssignableFrom(d)){
   return true;
} else {
   return false;
}
于 2013-04-25T08:54:31.073 回答
1
if (c.isInterface()) return true;

是接口

public boolean isInterface()

确定指定的 Class 对象是否表示接口类型。返回: 如果此对象表示接口,则为 true;否则为假。sAssignableFrom

public boolean isAssignableFrom(Class<?> cls)

确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。如果是,则返回 true;否则返回false。如果此 Class 对象表示原始类型,则如果指定的 Class 参数正是此 Class 对象,则此方法返回 true;否则返回false。

具体来说,该方法测试指定的 Class 参数表示的类型是否可以通过恒等转换或扩展引用转换转换为该 Class 对象表示的类型。有关详细信息,请参阅 Java 语言规范,第 5.1.1 和 5.1.4 节。

参数: cls - 要检查的 Class 对象 返回: 指示 cls 类型的对象是否可以分配给此类对象的布尔值 抛出: NullPointerException - 如果指定的 Class 参数为 null。自:JDK1.1

于 2013-04-25T08:54:33.763 回答
1

怎么样

public boolean isInterface();

根据文档:

确定指定的 Class 对象是否表示接口类型。返回: 如果此对象表示接口,则为 true;否则为假。

于 2013-04-25T08:52:03.867 回答
0

你试过了吗

c.isInterface()???

来自文档

确定指定的 Class 对象是否表示接口类型。

于 2013-04-25T08:52:38.303 回答