我知道如何检查对象是否实现了接口。但是,如果子类实现接口,我该如何检查父类?
假设
class A {
//What can I do to check here?
}
和
class B extends A implements Listener{
}
和
class C extends A {
}
此处B
实现了界面Listener
,但C
没有。我该如何检查?
答案 0 :(得分:4)
this
或Object.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()