Java本身没有这些注释。
相反,大约有10互不兼容的思想,其中大多数工作完全不同,适用不同的含义是什么 NonNull
意味着,在那里你可以把它,和它是如何工作的。
Oof. 这是非常不幸的,因为基本的想法使用的说明,添加这一信息大大优于任择和如此,鉴于这将是完全兼容并不把现有的码进入低迷的obsolecence,不同 Optional
.
因此,寻找一个你喜欢的,并将它包括在项目相同的方式,包括任何第三方的依赖关系--通常由包括它在你的家/摇篮/蚂蚁常春藤/etc(生成文件的清单的依赖).
用浏览器有其自己采取的非空,并可为空。 它可能是最方便。 其想法是什么这些注释的意思是劣1. 检查程序框架是最好的食是一个遥远的第二个最好的,而其他的一切(包括用浏览器)的股份的第三个地点。 最好采取的是被发现在检查程序框架,或者,几乎同样好的,日食的拿上这些注释。 但是,我怀疑用浏览器就是空检查系统都能够充分了解其较高级的增加,例如 @PolyNull
,因此这种额外的表达能力,将大多是浪费掉。 作为奖励,用浏览器的船一堆的数据关于什么的权利无效的注解将是关于主要图书馆。
最后一项是重要的:最常用的java库,包括 java.*
本身, 没有这些注释和工作与半空附加说明的代码是一个非常令人沮丧的行使;成本,大大超过益处。 唯一真正的解决办法是'固定的'库,使用与权利无效的信息,但这是一吨的工作。 幸运的是,用浏览器已经做了很多吧。
我希望(日食不会这样),quickfix(CMD+1月mac,按CTRL+1在非mac,至少,出的框如果我的记忆的缺省快捷键的话),包括'自动添加蚀的无效性说明的类路径'(或在您的案件和架构来达成的,当然)。 如果这是某种没有出现, 这页用浏览器docs 解释究竟是如何加 org.jetbrains.annotations
库,其中含有他们的无效性注释,到项目中。 事实上,这些文件表明,事实上,quickfix菜单提供你选择的自动加入这个图书馆作为解决错误,你得到你 @NonNull
节点在你的源码。
[1]最需要的无效性注释的限制自己相当通过允许的注释仅在领域,方法(这意味着:它返回),并参数。 然而,一个可以有一个肯定是-不是-空 List
的可能-是-空 Map
实例,其中地图绝对不是空 String
到可能空 Integer
: @NonNull List<@Nullable Map<@NonNull String, @Nullable Integer>>
. 注解系统是能够让你写信,但只有如果你的注释是设立仅仅是为TYPE_USE. 检查程序的框架和日蚀的无效性注释的工作;大多数其他人不这样做,因此较少的表现。 CheckerFramework进一步的步骤和可以让你写的概念'要么无效是现'. 就像仿制药中有3种形式(List<Integer>
, List<? super Integer>
和 List< extends Integer>
一旦泛参与,2nullities(无论是从来没有空,或肯定null是允许的)不再是足够的,你需要更多的nullities. 检查程序框架 @PolyNull
会让你的链接nullities:例如,你可以写这种方法在checkerframework但你不可能把它写正确地输入和架构来达成的,或者对于这个问题蚀:
public void duplicateFirstMatch(List<T> elems, Predicate<T> matcher);
那里的想法是:该方法运行的匹配对每一个元件中的列表,并在一匹配,即件末尾添加的名单。 这种方法可以工作,如果 T
被认为是'@非null'(由于没有空中,null永远不能加入通过这个代码,因此非无效,其要素不可侵犯),但它的工作,以及如果只是 T
是 @Nullable
提供的匹配,也是的 @Nullable T
当然:现在,这个代码可能加null的名单,但那是好的。
因此 T
既不是也不可空的非空,但是Ts中提到的签名的确需要配合他们的nullities. @PolyNull
解决了这个问题。