我想使用@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)
通常,您应该查看注释的文档.不幸的是,javax.annotation.Nonnull注释不包含任何文档(!).注释由JSR 305提出,但JSR 305已被放弃.JSR 305没有提供语义,也没有提供参考实现.
您将需要使用某些工具处理注释,例如Checker Framework或FindBugs.除了在接口上了解是否要在实现上编写注释之外,还需要查看该工具的文档.
在检查框架手册说,你需要写注释的实施以及在界面上.这样可以提供更好的文档,因为您可以自己理解实现,而无需同时阅读界面.
该FindBugs的手册不包含单词"继承",也不是"继承",而消息 来 的并没有回答有关注释和继承的邮件列表.FindBugs确实将一些注释(例如CheckReturnValue)视为继承,但您似乎无法保证@Nonnull的当前或未来行为.我建议明确地编写注释,这应该是安全的并且具有上面提到的文档优点.
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |