Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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 Eclipse JDT空指针分析似乎对Objects.requireNonNull有特殊的行为,它可以';不可复制_Java_Eclipse_Eclipse Jdt_Eclipse Eea - Fatal编程技术网

Java Eclipse JDT空指针分析似乎对Objects.requireNonNull有特殊的行为,它可以';不可复制

Java Eclipse JDT空指针分析似乎对Objects.requireNonNull有特殊的行为,它可以';不可复制,java,eclipse,eclipse-jdt,eclipse-eea,Java,Eclipse,Eclipse Jdt,Eclipse Eea,Eclipse具有空指针注释分析,您可以附加外部注释。有相关文件,以防你在这里绊倒和困惑 无论如何,如果我附加JDK外部注释(也称为*.eea文件)并打开注释分析,我可以执行以下操作(假设someObject是@Nullable): Objects.requirennoull(someObject); someObject.toString()//此处没有错误/警告,因为Eclipse显然发现someObject不是null。 requirennoull的eea定义为: requireNonN

Eclipse具有空指针注释分析,您可以附加外部注释。有相关文件,以防你在这里绊倒和困惑

无论如何,如果我附加JDK外部注释(也称为*.eea文件)并打开注释分析,我可以执行以下操作(假设someObject是
@Nullable
):

Objects.requirennoull(someObject);
someObject.toString()//此处没有错误/警告,因为Eclipse显然发现someObject不是null。
requirennoull
的eea定义为:

requireNonNull
 <T:Ljava/lang/Object;>(TT;)TT;
 <T:Ljava/lang/Object;>(T0T;)T1T;
显然,我可以通过重新分配:

someObject = MyObjects.likeRequireNonNull(someObject);
someObject.toString(); // No error or warning. 
但在某些情况下,这是不可取的(lambdas)

由于某些对象现在被重新分配给一个
@NonNull
,所以上面的错误是因为

因为我不知道如何复制
对象的行为。requirennoull
在不需要重新分配的地方。我无法理解Eclipse如何通过外部注释知道
对象



编辑:显然Objects.requirennoull可能在一个特殊的白名单上,根据这个bug:

是的,正如我提到的,有一个已知方法的内部列表。MessageSend.detectAssertionUtility似乎是执行此检查的方法是的,很遗憾您无法自定义它。似乎EEA格式可以扩展,以便添加更多类型。现在它的0=null和1=NonNull。可以添加的是另外4种类型:2种用于可空/非空类方法,2种用于可空/非空类布尔类方法。
someObject = MyObjects.likeRequireNonNull(someObject);
someObject.toString(); // No error or warning.