我一直在使用Guice的AOP来拦截一些方法调用.我的类实现了一个接口,我想注释接口方法,以便Guice可以选择正确的方法.即使注释类型使用Inherited annotation注释,实现类也不会继承Inherited的java doc中所述的注释:
另请注意,此元注释仅导致注释从超类继承; 已实现接口上的注释无效.
这可能是什么原因?了解对象类在运行时实现的所有接口并不是一件难事,因此必须有充分的理由支持这一决策.
我想使用@Nonnull提供的注释,javax.annotaiton.Nonnull其中保留策略作为运行时.使用此注释,我想确保此函数永远不会返回null.我想在界面上添加注释,以便将来的实现不会破坏现有代码,如下所示
public interface X {
@Nonnull public List<A> func();
}
Run Code Online (Sandbox Code Playgroud)
现在我不明白的是,我是否应该在实现上使用相同的注释.那么下面哪一个是编写这个接口的实现的正确方法(这两个编译):
public class XImpl implements X {
@Override
@Nonnull public List<A> func() {
//code
}
}
Run Code Online (Sandbox Code Playgroud)
要么
public class XImpl implements X {
@Override
public List<A> func() {
//code
}
}
Run Code Online (Sandbox Code Playgroud)