实现Map.entrySet(Java8,Eclipse)时出现'不匹配的空约束'错误

时间:2015-09-12 13:21:44

标签: 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)

......在实施Map并覆盖Map.entrySet时:

package org.abego.util;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
...    
public abstract class MyMap<K, T> implements Map<K, T> {
    private Map<K, T> map = new LinkedHashMap<>();

    @Override
    public Set<java.util.Map.Entry<K, T>> entrySet() {
        return map.entrySet();
    }
    ...
}

org.abego.util将默认的空值定义为@NonNull

@org.eclipse.jdt.annotation.NonNullByDefault
package org.abego.util;

我发现摆脱错误的唯一方法是使用entrySet注释为@NonNullByDefault({})删除默认的nullness注释:

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();
    }
    ...
}

虽然这确实有效,但我想知道这是否是正确的方法来修复错误。

(我正在使用Eclipse 4.5(Mars)和jdk1.8.0_60。)

0 个答案:

没有答案