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



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

假设

class A {
//What can I do to check here?
}

class B extends A implements Listener{

}

class C extends A {

}

在这里,B实现了接口Listener,但C没有。如何检查?

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

如果你操作类:

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

如果操作实例:

if (this instanceof Listener){
...
}

您可以在父类中检查this变量是否实现了您的Listener-接口,因为this变量引用了实际的子类对象:

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

所以上面的代码块将为子类B执行,但不为C

你可以在A中有一个这样的方法:

public void maybeAddListener() {
if (this instanceof Listener) {
somethingOrAnother.addListener((Listener) this);
}
}

这是否是一个好主意取决于您究竟想通过它实现什么。如果A的子类可能会实现Listener那么更好的主意是只在A中实现它,然后什么都不做,并让子类覆盖适当的方法。

我现在能想到的是创建该类的对象并检查

object instanceof interface 

object.getClass().getInterfaces() 

最新更新