检查一个类是否实现了接口?

时间:2013-12-18 11:02:49

标签: java oop

如何检查类是否在java中实现特定接口?我知道我可以使用instanceof,但我需要的是检查它没有它的对象。任何帮助表示赞赏

例如:

Class MyClass implements Runnable{

}

检查MyClass是否在不创建MyClass对象的情况下实现runnable

6 个答案:

答案 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(...);