Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查可为null的int会导致问题_Java_Annotations_Nullable - Fatal编程技术网

Java 检查可为null的int会导致问题

Java 检查可为null的int会导致问题,java,annotations,nullable,Java,Annotations,Nullable,我有以下方法: public void myMethod (@Nullable int number) { if (number == null) { } } 它会导致编译器错误,表示无法比较null和int。但数字是用@Nullable属性标记的!这意味着它可以是空的,对吗 当我尝试用null调用该方法时,编译器再次出错。如果是这样的话,为什么我首先要将int标记为null呢 我只是想问为什么我可以将一个int标记为null,但是我不能将它设置为null。将int更改为整数

我有以下方法:

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

    }
}
它会导致编译器错误,表示无法比较null和int。但数字是用@Nullable属性标记的!这意味着它可以是空的,对吗

当我尝试用null调用该方法时,编译器再次出错。如果是这样的话,为什么我首先要将int标记为null呢

我只是想问为什么我可以将一个int标记为null,但是我不能将它设置为null。

将int更改为整数。 Null只能分配给对象,不能分配给基元类型。 使用int的包装类,即Integer

在您的情况下,数字不应为null,因为它是一种基本类型,null永远不能分配给基本类型。

@nullable是一种注释。注释只是元数据。你需要一些外部的东西使它有用。使用注释最多只能指定它们可以注释的内容。这是通过@Target和各种ElementType枚举常量提供的

其中,是参数,默认值是所有可以注释的内容。参数用于注释方法参数。如果您只将参数设置为@Target,那么如果您尝试在其他任何地方使用注释,编译器将出错。对于某些内置注释类型,这是编译器在自己的YMMV上可以提供的最多值

在其他任何情况下,您都需要构建一些在编译时或运行时处理注释的东西。在这种情况下,用@Nullable注释该参数完全没有意义

显然,int是一种基本类型。null是null类型的唯一值,它是可赋值的或可以转换为引用类型。除非通过装箱/取消装箱操作,否则无法将原语与引用类型进行比较

所以

是可以在编译时验证为语法不正确的东西。这个

@Nullable int number

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

不能为空。可以将空值指定给对象,但不能指定给基本体;将其更改为在对象中封装基元类型int的值。

此注释通常用于消除NullPointerException@Nullable通常表示此参数可能为null

另请参见GoogleGuice

在这个轻量级依赖项注入框架中,您告诉我们这个依赖项可能为null。如果您试图传递null而不进行注释,框架将拒绝执行它的工作


参考:

@Nullable是一种类型批注,如果您检查@Nullable和@NonNull的来源

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

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

因为int是一个基本类型,所以这里可能会抛出异常。这将在编译时进行强类型检查,而不是使用int,而是使用Integer类
if (value == null)
     return When.NEVER;