gpt4 book ai didi

java - 当已经在接口(interface)上指定时是否需要在实现上使用注释

转载 作者:搜寻专家 更新时间:2023-10-31 19:54:41 25 4
gpt4 key购买 nike

我正在考虑使用 javax.annotaiton.Nonnull 中提供的 @Nonnull 注释,它具有作为运行时的保留策略。使用此注释,我想确保此函数永远不会返回 null。我想将注释放在接口(interface)上,以便 future 的实现不会破坏现有代码,如下所示

public interface X {
@Nonnull public List<A> func();
}

现在我不明白的是我是否也应该在实现上使用相同的注释。那么下面哪一个是编写这个接口(interface)的实现的正确方法(这两个都编译):

public class XImpl implements X {
@Override
@Nonnull public List<A> func() {
//code
}
}

或者

public class XImpl implements X {
@Override
public List<A> func() {
//code
}
}

最佳答案

通常,您应该查看注释的文档。不幸的是,javax.annotation.Nonnull annotation不包含文档 (!)。该注解由 JSR 305 提出,但 JSR 305 已被废弃。 JSR 305 没有给出语义,也没有给出引用实现。

您需要使用一些工具处理注释,例如 Checker FrameworkFindBugs .为了了解除了接口(interface)之外是否还要在实现上编写注释,您需要查看该工具的文档。

Checker Framework manual说你需要在实现和接口(interface)上写注释。这提供了更好的文档,因为您可以自己理解实现,而无需阅读界面。

FindBugs 手册不包含“继承”或“继承”等词,并且 messages to the关于注释和继承的邮件列表没有得到答复。 FindBugs 确实处理了一些注释,例如 CheckReturnValue ,作为继承,但您似乎无法保证@Nonnull 的当前或 future 行为。我建议显式编写注释,这应该是安全的并且具有上述文档优势。

关于java - 当已经在接口(interface)上指定时是否需要在实现上使用注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27637650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com