我需要检查:Java - 如何检查类是否继承某些类或接口?
public static boolean check(Class<?> c, Class<?> d)
{
if (/* c inherits from d */)
return true;
else
return false;
}
我怎么能这样做?
这是可能的没有c.newInstance()
?
标题在第一时间是错误的。现在它是正确的。
我需要检查:Java - 如何检查类是否继承某些类或接口?
public static boolean check(Class<?> c, Class<?> d)
{
if (/* c inherits from d */)
return true;
else
return false;
}
我怎么能这样做?
这是可能的没有c.newInstance()
?
使用isAssignableFrom
if(d.isAssignableFrom(c)){
// then d is a superclass of c
// in other words, c inherits d
}
判定此Class对象 表示的类或接口或者是相同,或是一个超类或超接口中, 类或接口由下式表示指定的Class参数。如果是这样,它将返回true;否则返回false。如果此Class对象 表示基本类型,则此方法返回true,如果指定的 Class参数恰好是此Class对象;否则返回 false。
有一个叫Class#isInterface()方法Class
if (c.isInterface())
return true;
downvoter关心评论?? – PermGenError 2013-04-25 08:56:50
我没有downvote,但我第一次想到,当我看到这个答案是它如何检查继承或特定接口的实现。也许这个问题在你身上发生了变化,但是如果你重读了这个问题,OP就会发现一个类是否扩展了另一个类或者实现了一个特定的接口。注意'c继承d'评论? – 2013-04-25 08:58:53
@KevinBowersox最初的题目是不同的。 :) – PermGenError 2013-04-25 09:00:35
有你陪
c.isInterface()???
从文档
确定试图指定的Class对象represe nts一个接口类型。
尝试了这一点
if(c.isAssignableFrom(d)){
return true;
} else {
return false;
}
右提示,但c和d必须交换'd.isAssignableFrom(c)'。 – Bitterblue 2013-04-26 09:04:48
写回归c.isAssignableFrom(d)会更有意义吗?或者你是Verbose先生 – Snickers3192 2015-02-27 07:39:23
if (c.isInterface()) return true;
isInterface
public boolean isInterface()
判定指定Class对象表示一个接口类型。 返回: 如果此对象表示接口,则为true;否则为假。 sAssignableFrom
public boolean isAssignableFrom(Class<?> cls)
判定此Class对象所表示的类或接口或者是相同,或是一个超类或超接口中,通过指定的Class参数所表示的类或接口。如果是的话,它返回true;否则返回false。 如果此Class对象表示基本类型,则此方法返回true,如果指定的Class参数恰好是此Class对象;否则返回false。
具体而言,此方法测试指定Class参数表示的类型是否可以通过标识转换或通过扩展参考转换转换为此Class对象表示的类型。 有关详细信息,请参见Java语言规范第5.1.1和5.1.4节。
参数: CLS - Class对象进行检查 返回: 指示是否型CLS的对象可以被分配给 这个类的对象布尔值抛出: NullPointerException - 如果指定的Class参数为空。 从: JDK1.1
为什么选择down-vote?我是第一个提到'isInterface' – Apurv 2013-04-25 09:05:16