检查子类是否在父类中实现接口?

时间:2018-06-15 07:26:58

标签: java interface

我知道如何检查对象是否实现了接口。但是,如果子类实现接口,我该如何检查父类?

假设

class A {

   //What can I do to check here?

}

class B extends A implements Listener{


  }

class C extends A {


  }

此处B实现了界面Listener,但C没有。我该如何检查?

4 个答案:

答案 0 :(得分:4)

thisObject.getClass()在运行时分别返回引用的Class对象 因此,您可以使用它们来检查对象或类是否实现了特定的接口。

如果你操纵类:

if (Listener.class.isAssignableFrom(C.class)){
   ...
}

如果你操纵实例:

if (this instanceof Listener){
   ...
}

答案 1 :(得分:2)

如果this变量实现了Listener - 接口,则可以检查父类,因为this - 变量引用了实际的子类对象:

public class A{
    public void doSomething(){
         if(this instanceof Listener){
             // do something if it is a listener
         }
    }
}

因此,上面的代码块将针对子类B执行,但不会针对C执行

答案 2 :(得分:1)

您可以在A

中使用这样的方法
public void maybeAddListener() {
    if (this instanceof Listener) {
        somethingOrAnother.addListener((Listener) this);
    }
}

这是否是一个好主意取决于你想要用它实现什么。如果A的子类可能实现Listener,那么更好的想法是在A中使用do-nothing实现实现它,并让子类覆盖适当的方法。

答案 3 :(得分:0)

我现在能想到的是创建该类的对象并使用

进行检查
    object instanceof interface 

或者

     object.getClass().getInterfaces()