ibe*_*beu 1 java annotations nullable
我偶然发现我不小心这样做了:
@javax.annotation.Nullable
@javax.validation.constraints.NotNull
Run Code Online (Sandbox Code Playgroud)
编译器没有抱怨,一切似乎都很好。
现在,我想知道当两个或更多注释相互矛盾时内部发生了什么。此外,顺序重要吗?
这是
@Nullable
@NotNull
Run Code Online (Sandbox Code Playgroud)
比这一样吗?
@NotNull
@Nullable
Run Code Online (Sandbox Code Playgroud)
一般来说,这对注释如何起作用?谁赢?
编辑:我正在寻找一个一般性的答案,不一定关于这两个注释
注释本身不会给您的代码带来任何逻辑。每个注释都应使用适当的注释处理器进行处理。注释处理器是使注释有意义的人。
查看官方教程:
注释是元数据的一种形式,它提供有关程序的数据,该数据不属于程序本身。注释对其注释的代码的操作没有直接影响。
注释有多种用途,其中包括:
- 供编译器使用的信息 - 编译器可以使用注释来检测错误或禁止显示警告。
- 编译时和部署时处理 -软件工具可以处理注释信息以生成代码,XML文件等。
- 运行时处理 -在运行时可以检查一些注释。
让我们考虑一下您上面提到的这两个特殊注释。首先,它们不是互斥的并且具有不同的性质。
的@javax.annotation.Nullable是其中一部分JSR-305,它有相对的一个- @javax.annotation.Nonnull。这些注释旨在注释您的类字段,方法参数和方法结果。您可以将它们与代码分析器一起使用,其中之一是Findbugs
这@javax.validation.constraints.NotNull是JSR-303 aka Bean验证的一部分。因此,此注释与并无共同之处@javax.annotation.Nullable,因为这些注释具有不同的处理器。
每次对注释语义有疑问时,都应检查文档,当然您可以运行代码,看看会发生什么。