检查可空整型会导致问题



我有以下方法:

public void myMethod (@Nullable int number) {
    if (number == null) {
    }
}

导致编译错误,认为nullint不能比较。但是number被标记为@Nullable属性!这意味着可以为空,对吧?

当我尝试用null调用方法时,编译器再次错误。如果是这种情况,为什么我可以在一开始就将int标记为空呢?

我只是想问为什么我可以标记int为空,但我不能将其设置为空

将整型改为整型
Null只能赋值给object,不能赋值给基本类型。
使用int的包装类,即Integer。

在这种情况下,number不应该为空,因为它是一个基本类型,而null永远不能被赋值给基本类型。

原始数据类型不能为null。你可以将null值赋给对象,但不能赋给原语;将其更改为Integer,将原始类型int的值包装在对象中。

@Nullable为注释。注释只是元数据。你需要一些外部的东西来使它有用。对于注释,你最多能做的就是指定它们能注释什么。这是通过@Target和各种ElementType枚举常量提供的。

PARAMETER(默认是所有内容都可以注释)。PARAMETER允许您注释方法参数。如果您只将PARAMETER设置为@Target,那么如果您试图在其他地方使用注释,编译器将会出错。这是编译器自己能给你的最多的(对于一些内置的注释类型来说是YMMV)。

在其他情况下,您需要构建一些东西来处理注释,无论是在编译时还是在运行时。在本例中,用@Nullable注释该参数是完全没有意义的。

显然,int是一个基本类型。null是null类型唯一可赋值(或可以强制转换)给引用类型的值。不能将原语与引用类型进行比较(除非通过装箱/拆箱操作)。

someIntValue == null

是可以在编译时验证语法错误的东西。这个

@Nullable int number

不能。它只是一个参数注释

此注释通常用于消除NullPointerExceptions@Nullable通常说该参数可能为null。

参见https://github.com/google/guice/wiki/UseNullable (Google Guice)

在这个轻量级依赖注入框架中,你告诉它这个依赖项可能是空的。如果你试图传递null而没有注释,框架将拒绝做它的工作。

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

@Nullable是一个类型注释,如果你检查@Nullable(https://code.google.com/p/jsr-305/source/browse/trunk/ri/src/main/java/javax/annotation/Nullable.java?r=24)和@NonNull(http://grepcode.com/file/repo1.maven.org/maven2/com.google.gwt/gwt-dev/2.5.1/javax/annotation/Nonnull.java)的来源

@NonNull在@Nullable中使用,并且在@NonNull代码中有一个检查null的条件,如下所示:

if (value == null)
     return When.NEVER; 

异常可能在这里抛出,因为int是基本类型。这将在编译时进行强类型检查

最新更新