java is not null,@NotNull和@Nullable,与Java注释矛盾

It happened to me that I accidentally did this:

@javax.annotation.Nullable

@javax.validation.constraints.NotNull

The compiler didn't complain and everything seemed to work well.

Now I am wondering what is internally happening when two or more annotations contradict each other. Furthermore, does the order matter?

Is this

@Nullable

@NotNull

the same than this?

@NotNull

@Nullable

How is this working for annotations in general? Who wins?

EDIT: I am looking for a general answer, not necessarily about these two annotations

解决方案

Annotations themselves don't bring any logic to your code. Each annotation should be processed with a proper annotation processor. Annotation processor is the guy who makes the annotation meaningful.

Annotations, a form of metadata, provide data about a program that is not part of the program itself. Annotations have no direct effect on the operation of the code they annotate.

Annotations have a number of uses, among them:

Information for the compiler — Annotations can be used by the compiler to detect errors or suppress warnings.

Compile-time and deployment-time processing — Software tools can process annotation information to generate code, XML files, and so forth.

Runtime processing — Some annotations are available to be examined at runtime.

Let's consider these 2 particular annotations you mentioned above. First of all, they are not mutual exclusive and have the different nature.

The @javax.annotation.Nullable is a part of JSR-305 and it has the opposite one - @javax.annotation.Nonnull. These annotations are designed to annotate your class fields, method params and method results. You can use them with code analyzers, one of them is Findbugs

The @javax.validation.constraints.NotNull is a part of JSR-303 aka Bean Validation. So this annotation has nothing common with @javax.annotation.Nullable, since these annotations have different processors.

Each time you have any doubts on the annotation semantics, you should check the documentation, and of course you can run you code and see what would happen.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值