奇怪的枚举映射行为



我尝试使用一个简单的java EnumMap来存储道路类型到默认速度的映射。但是我立即遇到了以下问题:

我创建了一个简单的枚举,如下所示:

   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;
        }
    }

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

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在返回this.speedMap.put(category, speed);的行中抛出了一个NullPointerException。因此,我添加了条件,但这在这里没有帮助。

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)

我不知道我在这里做错了什么。有谁知道如何解决这个问题/工作?

请参阅文档:

与键关联的上一个值,如果没有键的映射,则为 null。(如果实现支持 null 值,则 null 返回还可以指示映射以前将 null 与键相关联。

如果映射中没有category键,this.speedMap.put(category, speed);将返回 null。

现在Java将尝试将null转换为double(这意味着Java称为null.doubleValue()),这将抛出一个NPE。

相关内容

  • 没有找到相关文章

最新更新