奇怪的枚举Map行为

9nvpjoqh  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(347)

我试着用一个简单的java EnumMap 存储道路类型到默认速度的Map。但我立刻遇到了以下问题:
我创建了一个简单的枚举,如下所示:

public enum RoadCategory {

        AUTOBAHN("Autobahn", 0),
        BUNDESSTR("Bundesstrasse", 1),
        OTHER("other", -1);

        private String name;
        private int code;

        private RoadCategory(String name, int code){
            this.name = name;
            this.code = code;
        }
    }

接下来,我创建了一个小类,并尝试将此枚举用作枚举Map的键:

import java.util.EnumMap;
import java.util.Map;

public class VehicleConfig {

    public static void main(String[] args) throws Exception {
        VehicleConfig v = new VehicleConfig();
        v.addSpeedMapping(RoadCategory.AUTOBAHN, 80.0);
    }

    private Map<RoadCategory,Double> speedMap;

    public VehicleConfig(){
        this.speedMap = new EnumMap<RoadCategory, Double>(RoadCategory.class);
    }

    public double addSpeedMapping(RoadCategory category, double speed) throws Exception{
        if(speedMap == null) throw new Exception("speedmap NULL");
        if(category == null) throw new Exception("category NULL");
        return this.speedMap.put(category, speed);  // this is line 20
    }
}

不幸的是 addSpeedMapping 抛出 NullPointerException 在线返回 this.speedMap.put(category, speed); . 因此,我添加了条件,但在这里没有帮助。

Exception in thread "main" java.lang.NullPointerException
    at hpi.bpt.traffic.VehicleConfig.addSpeedMapping(VehicleConfig.java:20)
    at hpi.bpt.traffic.VehicleConfig.main(VehicleConfig.java:8)

我不知道我做错了什么。有人知道怎么修这个吗?

pbgvytdp

pbgvytdp1#

请参阅文档:
与键关联的上一个值,如果键没有Map,则为null(如果实现支持null值,则null返回还可以指示Map以前将null与key关联。) this.speedMap.put(category, speed); 如果没有密钥,则返回null category 在Map上。
现在java将尝试转换 nulldouble (这意味着java调用了null.doublevalue()),这将抛出一个npe。

相关问题