Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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 null analysis在泛型参数上具有@NonNull_Java_Eclipse_Null_Static Analysis_External Annotations - Fatal编程技术网

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
注释

这个问题有两个方面

  • Nullity是一个类型标记。这是一个独立的维度。泛型是不变的(这意味着:当需要<代码>列表<代码>时,不能使用<代码>列表<代码>;而当需要对象时,只能使用数字。这是因为数学就是这样计算的:否则,您可以将<代码>列表<代码>指定给类型为<代码>列表<代码>的变量,然后在其中添加一些非数字,但这意味着您需要我们在数字列表中填充了一个非数字,哇哦。结合这两个事实,它会变得有点毛茸茸的。让我们选择协方差,这可以用泛型来实现(
    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);