为什么不@NotNull或@Nullable存在在我的项目?

0

的问题

我的编程和架构来达成,而我只是工作上的一个Java项目,并且我想要做一个附加说明的参数为 @NotNull. 但架构来达成这说它不存在。 我检查了所有的java的文件,它不是我的项目。 我很困惑,我不家使用或摇篮,只是默认Java项目。 我不知道发生了什么。

这里是一个例子:

package com.company;


    public class Main {
         public static void main(String[] args){
                testF(null);
         }
         public static void testF (@NotNull Integer... numbers){
            for(Integer integer: numbers){
                   System.out.println(integer);
          }
     }
}

错误涉及在说法"不能解决的符号NotNul:10"(再次@前)

annotations intellij-idea java
2021-11-22 22:38:50
1

最好的答案

0

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 解决了这个问题。

2021-11-22 22:56:48

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................