我知道如何检查对象是否实现了接口。但是,如果子类实现了接口,如何检查父类呢?
假设
class A {
//What can I do to check here?
}
和
class B extends A implements Listener{
}
和
class C extends A {
}
在这里,B
实现了接口Listener
,但C
没有。如何检查?
this
或Object.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()