如何检查类是否在java中实现特定接口?我知道我可以使用instanceof,但我需要的是检查它没有它的对象。任何帮助表示赞赏
例如:
Class MyClass implements Runnable{
}
检查MyClass是否在不创建MyClass对象的情况下实现runnable
答案 0 :(得分:10)
你可以这样使用getInterfaces()
:
MyClass.class.getInterfaces()
然后迭代结果并检查Runnable
是否是其中之一
<强> ADITION:强> 如果你还想检查超类,你必须做以下几行:
boolean implementsRunnable(Class<?> clazz){
for(Class<?> c: clazz.getInterfaces()){
if(Runnable.class.isAssignableFrom(c)){
return true;
}
}
if(clazz.getSuperClass().equals(Object.class)){
return false;
}
return implementsRunnable(clazz.getSuperClass());
}
答案 1 :(得分:6)
试试:
if (Runnable.class.isAssignableFrom(MyClass.class)) {
// implements !
}
答案 2 :(得分:1)
另一种方式:
if(Interface.class.isAssignableFrom(MyClass.class))
答案 3 :(得分:0)
尝试
MyClass instanceof Runnable
答案 4 :(得分:0)
使用
if (MyClass instanceof Runnable) {
//...
}
答案 5 :(得分:0)
这是一个更简洁的形式来完成这项工作,它也更高效:
Runnable.class.isAssignableFrom(MyClass.class)
方法的名称isAssignableFrom
可能会产生误导,这意味着可以将此调用重写为合法的java分配:
Runnable r = new MyClass(...);