我尝试使用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如何进行编译和运行。
答案 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批注,但您需要在其中添加额外的依赖项。