获得';不匹配的空约束';实现Map.entrySet(Java8,Eclipse)时出错
我得到了错误获得';不匹配的空约束';实现Map.entrySet(Java8,Eclipse)时出错,java,eclipse,annotations,nullable,non-nullable,Java,Eclipse,Annotations,Nullable,Non Nullable,我得到了错误 The return type is incompatible with 'Set<Map.Entry<K,T>>' returned from Map<K,T>.entrySet() (mismatching null constraints) 包org.abego.util将默认空值定义为@NonNull: @org.eclipse.jdt.annotation.NonNullByDefault package org.abego.util
The return type is incompatible with 'Set<Map.Entry<K,T>>' returned from Map<K,T>.entrySet() (mismatching null constraints)
包org.abego.util
将默认空值定义为@NonNull
:
@org.eclipse.jdt.annotation.NonNullByDefault
package org.abego.util;
我发现消除错误的唯一方法是使用@NonNullByDefault({})
注释为entrySet
删除默认的空值注释:
package org.abego.util;
...
import org.eclipse.jdt.annotation.NonNullByDefault;
public abstract class MyMap<K, T> implements Map<K, T> {
...
@Override
@NonNullByDefault({})
public Set<java.util.Map.Entry<K, T>> entrySet() {
return map.entrySet();
}
...
}
package org.abego.util;
...
默认情况下导入org.eclipse.jdt.annotation.nonNull;
公共抽象类MyMap实现了Map{
...
@凌驾
@非NullByDefault({})
公共集入口集(){
返回map.entrySet();
}
...
}
虽然这确实有效,但我想知道这是否是修复错误的正确方法
(我正在使用Eclipse 4.5(火星)和jdk1.8.0_60。)您正在尝试覆盖此方法:
Set<Map.Entry<K, V>> entrySet();
有了这些外部注释,您的程序将被JDT的空分析所接受。您正试图覆盖此方法:
Set<Map.Entry<K, V>> entrySet();
有了这些外部注释,您的程序将被JDT的空分析所接受。谢谢,这就解决了问题。我现在正在使用外部空注释功能处理遇到的其他问题。这主要意味着将JRE方法的注释添加到“我的”外部注释文件中。由于我可能不是唯一一个遇到这种问题的人,我想知道是否已经有一些地方(比如Git repo之类)保存了Java 1.8 JRE等的外部注释文件。根据您的要求,我们的路线图上确实有。议程上的第一件事:知道其他人已经为JRE生成了注释存根jar,Eclipse将提供一个向导,用于将这些注释从jar导入到我们的文本格式。以后会有更多…谢谢,这解决了问题。我现在正在使用外部空注释功能处理遇到的其他问题。这主要意味着将JRE方法的注释添加到“我的”外部注释文件中。由于我可能不是唯一一个遇到这种问题的人,我想知道是否已经有一些地方(比如Git repo之类)保存了Java 1.8 JRE等的外部注释文件。根据您的要求,我们的路线图上确实有。议程上的第一件事:知道其他人已经为JRE生成了注释存根jar,Eclipse将提供一个向导,用于将这些注释从jar导入到我们的文本格式。以后会有更多。。。
@NonNull Set<@NonNull Map.Entry<K, V>> entrySet();
Set<Map.Entry<Foo,Bar>> entries = someMap.entrySet();
entries.add(null);
class java/util/Map
entrySet
()Ljava/util/Set<Ljava/util/Map$Entry<TK;TV;>;>;
()L1java/util/Set<L1java/util/Map$Entry<TK;TV;>;>;