在我的java项目中,我有一个私有的HashMap字段(eggs是一个枚举,bacon是一个具有ArrayList字段的对象)。所以它就像:
class Foo {
private HashMap<Eggs, Bacon> breakfast;
foo() {
this.breakfast = new HashMap<Eggs, Bacon>();}
void setValues(int x) {
ArrayList<Integer> temp;
Bacon b;
for(int i = 0; i < x; i++) {
temp.add(i);}
b = new Bacon(temp);
this.breakfast.put(Eggs.Scrambled, b);}
}
基本上,即使我确保在我的testClass中首先调用setValues,对morning.get()或breakfast.size()的调用也总是会导致NullPointerException。在我的实际代码中,我有几个枚举对象for循环中的映射。使用调试器,我发现值已设置但在每个循环结束时立即消失。我不知道为什么我的HashMap字段没有保存放入它的值。即使我将字段更改为ArrayList并设置或添加值,我仍然会得到相同的nullpointer / outofbounds异常
如果需要,我可以发布我的实际代码,但我想知道是否有人对此有任何见解。我在我的智慧结束
答案 0 :(得分:0)
您声明了ArrayList<Integer> temp
而没有为其指定值。
List<Integer> temp = new ArrayList<>();
此外有很多代码味道,你应该尝试遵循编码标准(我更喜欢谷歌的)并尝试重新考虑你的设计;构造函数可能完全删除列表会有所帮助,但是如果不知道实际的问题/代码,我们就无法真正知道。
答案 1 :(得分:0)
你需要初始化你的ArrayList,这就是造成空指针异常的原因。
另一件事,如果你使用枚举作为地图的关键从我的意见错误,HashMap将采取体面的空间,而你有限的键我不建议使用地图,而你可以使用培根数组和定义枚举中每个条目的索引,并使用它访问Bacons。