Java-Intellij IDEA在枚举getter方法lambda中警告有关NPE

时间:2019-06-18 09:28:41

标签: java intellij-idea enums nullpointerexception warnings

我有以下枚举:

import com.google.common.collect.Maps;

public enum ServiceType {
    SOME_SERVICE (4, SomeServiceEntity.class);

    private int id;
    private Class<? extends ServiceEntity> entityClass;

    private static final Map<Integer, ServiceType> LOOKUP = Maps.uniqueIndex(
            Arrays.asList(ServiceType.values()),
            ServiceType::getId     <<=======
    );

    ServiceType(int id, Class<? extends ServiceEntity> entityClass) {
        this.id = id;
        this.entityClass = entityClass;
    }

    public int getId() {
        return id;
    }

    // and other methods....
}

这行代码被Intellij IDEA标记为:

  

方法引用调用'ServiceType :: getId'可能会产生   'java.lang.NullPointerException'

当我只有一个包含我的id字段的构造函数并且枚举是对象的静态列表,因此它们都假定具有id时,怎么可能?

如何消除此警告?

UPD: 坚持:

private static final Map<Integer, ServiceType> LOOKUP = Arrays.stream(
        ServiceType.values()).collect(Collectors.toMap(
                ServiceType::getId, Function.identity()
        )
);

1 个答案:

答案 0 :(得分:3)

正如评论所说,您在那里使用了一个lambda,它获取了一个参数。当那个为空时,则给出一个NPE。

因此,请尝试以下操作:

private static final Map<Integer, ServiceType> LOOKUP = 
  Arrays
    .stream(ServiceType.values())
    .Collectors.toMap(ServiceType::getId, Function. identity());

其中...错误...可能会给您同样的警告。

因此,如果您真的想在此处使用流式播放,则可能必须取消该警告。