@ com.sun.istack.internal.NotNull注释

时间:2018-10-23 07:29:31

标签: java intellij-idea annotations javac

我尝试使用com.sun.istack.internal包中的@NotNull批注。

我正在使用IDE Intellij IDEA社区版。 当我使用IDE构建程序时没问题。当我尝试使用javac从命令行编译文件时,出现错误“找不到符号”。

package ibkr;

import com.sun.istack.internal.NotNull;

public class Main {

    public static void main(String[] args) {
        test("Test");
    }

    public static void test(@NotNull String text) {
        System.out.println(text);
    }
}

我不明白为什么我不能使用javac编译此代码以及Intellij IDEA如何进行编译和运行。

3 个答案:

答案 0 :(得分:2)

该注释是一个内部类,仅供公共使用。最接近的替代品是Jetbrains的东西:

https://www.jetbrains.com/help/idea/nullable-and-notnull-annotations.html

即使该类位于类路径中,也不一定意味着您可以安全地引用该类。编译器在访问某些类/包时可能会有一些限制。

在大多数情况下,如此处所示,很明显该软件包是否为内部软件包:com.sun.istack. internal 。 Oracle不鼓励开发人员使用此类软件包中的类。

答案 1 :(得分:2)

好吧,我知道这个问题有点老了,但是如果我的信息正确的话,原因是由于ct.sym,intellij使用完整的rt.jar进行编译,而javac使用不完整的版本

>

答案 2 :(得分:0)

这是用于标识非空值的注释,这也将使静态分析器对其进行检查。如果您使用的是IntelliJ,则可以使用其批注,但这会使它变得非常特定于工具,与eclipse一样。 你也可以

https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl

这提供了相同的非null批注,但您需要在其中添加额外的依赖项。