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()