当前位置: 首页 > 面试题库 >

为什么Java类不从实现的接口继承注释?

姬天宇
2023-03-14
问题内容

我一直在使用Guice的AOP来拦截一些方法调用。我的课程实现了一个接口,我想注释接口方法,以便Guice可以选择正确的方法。即使使用继承的注释对注释类型进行注释,实现类也不会继承Inherited的java doc中所述的注释:

还要注意,此元注释仅使注释从超类继承;已实现的接口上的注释无效。

这可能是什么原因?了解对象的类在运行时确实实现的所有接口并不是一件容易的事,因此在此决定背后必须有充分的理由。


问题答案:

我要说的原因是,否则会发生多重继承问题。

例:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) @Inherited
public @interface Baz { String value(); }

public interface Foo{
    @Baz("baz") void doStuff();
}

public interface Bar{
    @Baz("phleem") void doStuff();
}

public class Flipp{
    @Baz("flopp") public void doStuff(){}
}

public class MyClass extends Flipp implements Foo, Bar{}

如果我这样做:

MyClass.class.getMethod("doStuff").getAnnotation(Baz.class).value()

结果将是什么?’baz’,’phleem’或’flopp’?

因此,接口上的注释很少有用。



 类似资料:
  • 问题内容: 我有以下界面: 我在下面有抽象类(没有提到方法插入): 我有具体的课程: 最后,SpecificEntryBean定义为: 我有以下错误: 类型SpecificEntry必须实现继承的抽象方法SingleRecordInterface.insert(AbstractEntryBean) 考虑到SpecificEntryBean扩展了AbstractEntryBean,所以我不明白此错误

  • 我有一个带有注释方法的接口。注释用标记,所以我希望实现者继承它。然而事实并非如此: 所以问题是,为什么没有,尽管它实现了一个标记为的方法,即?

  • 在定义一个类时往往会使其继承某个父类或者实现某个接口,在扩展中实现这个功能非常方便。下面我先给出PHP语言中的代码。 <?php interface i_myinterface { public function hello(); } class parent_class implements i_myinterface { public function hello()

  • 我在阅读java 8默认方法时遇到了以下段落: 如果层次结构中的任何类具有具有相同签名的方法,则默认方法变得无关紧要。默认方法不能重写java.lang.Object的方法。原因很简单,因为Object是所有java类的基类。因此,即使我们将对象类方法定义为接口中的默认方法,它也是无用的,因为对象类方法将始终被使用。这就是为什么为了避免混淆,我们不能让默认方法重写对象类方法。 我很快尝试按照代码来

  • 问题内容: 接口是否从 Java中的类继承? 如果否,那么我们如何在接口实例上调用对象类的方法 问题答案: 接口是否从 Java中的类继承? 不,他们没有。而且,就这一点而言,也不存在所有接口都隐式继承的通用“根”接口(与类一样)。() 如果否,那么我们如何在接口实例上调用对象类的方法 接口为中的每个公共方法隐式声明一个方法。因此,该方法被隐式声明为接口中的成员(除非它已经从超级接口继承了该方法)

  • 本文向大家介绍Java中继承thread类与实现Runnable接口的比较,包括了Java中继承thread类与实现Runnable接口的比较的使用技巧和注意事项,需要的朋友参考一下 Java中线程的创建有两种方式:  1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类     在实际应用中,我们经