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

Java 检查子类是否在父类中实现接口?,java,interface,Java,Interface,我知道如何检查对象是否实现了接口。但是如果子类实现了接口,我如何签入父类呢 假设 class A { //What can I do to check here? } 及 及 这里B实现接口Listener,但是C没有。我怎么检查 您可以在父类中检查此变量是否实现了侦听器-接口,因为此-变量引用了实际的子类对象: public class A{ public void doSomething(){ if(this instanceof Listener){

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

假设

class A {

   //What can I do to check here?

}


这里
B
实现接口
Listener
,但是
C
没有。我怎么检查

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

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
中使用不做任何事情的实现来实现它,并让子类覆盖适当的方法。

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

如果操纵类:

if (Listener.class.isAssignableFrom(C.class)){
   ...
}
如果操纵实例:

if (this instanceof Listener){
   ...
}

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

    object instanceof interface 


如果
A
包含需要知道这一点的代码,您应该重新考虑您的设计。至少添加一些示例代码说明为什么需要这样做。是的,“为什么”是一个相关的问题。你为什么要这么做?
if (this instanceof Listener){
   ...
}
    object instanceof interface 
     object.getClass().getInterfaces()