Java Eclipse null analysis在泛型参数上具有@NonNull
我在使用此代码时遇到问题Java Eclipse null analysis在泛型参数上具有@NonNull,java,eclipse,null,static-analysis,external-annotations,Java,Eclipse,Null,Static Analysis,External Annotations,我在使用此代码时遇到问题 import com.fasterxml.jackson.databind.ser.std.StdSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; ... StdSerializer<Object> stdSerializer; stdSerializer = ToStringSerializer.instance; 为什么Eclipse 2021-
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
...
StdSerializer<Object> stdSerializer;
stdSerializer = ToStringSerializer.instance;
为什么Eclipse 2021-03(4.19.0 build 20210312-0638)会说ToStringSerializer.instance
需要…
?Eclipse如何确定对象
必须是@NonNull
?我该如何解决这个问题
我在Eclipse2020-12上发现了这个问题,它也发生在Eclipse2021-03上
为什么eclipse会说ToStringSerializer.instance
需要是…
因为你是这么说的。具体来说,您说过所有类型都被假定为固有的@NonNull
,,除非它们被明确标记为@Nullable
。这就是@NonNullByDefault
所做的。这意味着:只要出现一个类型,并且该类型上没有表示注释的空值,就可以假定它有一个@NonNull
注释
这个问题有两个方面
ListSolution#1:我将代码更改为StdSerializer
。这并没有解决问题。错误消息中唯一的区别是@NonNull
被替换为@Nullable
。解决方案#3:我想使用外部注释系统对Jackson进行正确的外部注释。您可以在中看到我的尝试问题。我还需要做什么?解决方案4:在谷歌上搜索“class com/fasterxml/jackson/databind/ser/std/ToStringSerializer”这个类似乎没有显示任何.eea文件。解决方案#2是一个变通方法。解决方案#5不是一个真正的解决方案。正如#1所说:啊,是的,当然-我没有注意我自己的教训。这是因为如果你不知道输入,任何一个都是“危险的”:想象它是一个列表。你可以做List.get(0).doStuff
在列表上
没有空警告;如果其中有空值,这是危险的。但是您可以执行列表。将(null)
添加到列表
也不好,因此如果您不知道列表组件的空值类型,则任何赋值都需要未经检查的转换。请尝试以下操作:StdSerializer
class com/fasterxml/jackson/databind/ser/std/ToStringSerializer
instance
Lcom/fasterxml/jackson/databind/ser/std/ToStringSerializer;
L1com/fasterxml/jackson/databind/ser/std/ToStringSerializer;
...
List<? extends @Nul Integer> ➞ List<? extends @Nul Number> ➞ List<? extends @Nul Object>
↑ ↑ ↑
List<? extends @NN Integer> ➞ List<? extends @NN Number> ➞ List<? extends @NN Object>
Map<@NonNull String, @NonNull String> map;
public V get(K key);