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

为什么java类不从实现的接口继承注释?,java,inheritance,interface,annotations,guice,Java,Inheritance,Interface,Annotations,Guice,我一直在使用Guice的AOP拦截一些方法调用。我的类实现了一个接口,我想对接口方法进行注释,以便Guice能够选择正确的方法。即使注释类型是使用注释实现类进行注释的,也不会继承继承的java文档中所述的注释: 还要注意,这个元注释 只会导致注释被删除 继承自超类; 实现接口上的注释 没有效果 这可能是什么原因?了解一个对象的类在运行时实现的所有接口并不是一件很难的事情,所以这个决定背后一定有一个很好的原因。我想说的原因是,否则会发生多重继承问题 示例: @Retention(Retention

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

还要注意,这个元注释 只会导致注释被删除 继承自超类; 实现接口上的注释 没有效果


这可能是什么原因?了解一个对象的类在运行时实现的所有接口并不是一件很难的事情,所以这个决定背后一定有一个很好的原因。

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

示例:

@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,freeem,还是flopp



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

来自For@Inherited:

指示注释类型是自动继承的。如果 继承的元批注存在于批注类型上 声明,用户查询类的注释类型 声明,而类声明对此没有注释 类型,则将自动查询该类的超类 注释类型。此过程将重复进行,直到生成注释为止 找到此类型的,或类层次结构(对象)的顶部为 达到。如果没有超类具有此类型的注释,则 查询将指示所讨论的类没有这样的注释。 请注意,如果已注释的 类型用于注释除类以外的任何内容。还请注意 此元注释只会导致从中继承注释 超类;已实现接口上的注释无效

另一方面,JSR305验证器执行某种继承查找。如果您有类的层次结构:

//Person.java
@Nonnull
 public Integer getAge() {...}

//Student.java (inherits from Person)
@Min(5)
public Integer getAge() {...}

然后,对
Student.getAge()
的有效验证是
@Nonnull@Min(5)
@Nonnull
没有继承的
@元注释。

接口上的注释只有在您有支持它们的框架时才有用。顺便说一句,在本例中,getAnnotation()返回null;)我不知道,各位。在这种情况下(如果没有输入错误),我希望出现
字段值不明确。
类编译器错误,就像两个接口用不同的值声明相同的常量一样。我知道这不是一个字段,但注释值在编译时得到所有解析,不是吗?我们这里缺少的功能在很多情况下都会非常有用。顺便说一句,很抱歉恢复了一篇旧帖子:)@Slanec看看Spring的来源,看看Spring的人是如何解决这些问题的。我在考虑写类似的东西。使用某种简单的缓存,这似乎是我的一种选择。谢谢在上面的示例中,它会找到
Foo
的注释(
MyClass
没有注释,然后按照接口在
实现之后的顺序进行搜索和获取),并因此打印“baz”。很酷。@WChargin没错,只是花了2年时间才有人发现那个打字错误:-)这一个应该是被选中的答案你的例子与你的答案相矛盾,也就是说,
@inheritated
对任何东西都没有影响,除了class@Inherited只有在类上使用注释时才有效回答OP关于接口上注释的问题怎么样!?