Java 为什么会在这里抛出NullPointerException?

Java 为什么会在这里抛出NullPointerException?,java,collections,Java,Collections,这是我的收藏,我制作: Test<v> map = new Test<V>(); testmap=newtest(); 但是当我调用sort方法时,我在测试类中重写了它,并且map1是我在测试类中创建的一个集合,它将保留我添加到map集合中的元素,这个异常将被抛出,因为它是针对第5行的:a[I]=map.get(new Integer(I)) V[]a=null; 公共无效排序(){ V温度=零; 对于(int i=0;ia[i+1].getName().hashCo

这是我的收藏,我制作:

Test<v> map = new Test<V>();
testmap=newtest();
但是当我调用sort方法时,我在测试类中重写了它,并且map1是我在测试类中创建的一个集合,它将保留我添加到map集合中的元素,这个异常将被抛出,因为它是针对第5行的:a[I]=map.get(new Integer(I))

V[]a=null;
公共无效排序(){
V温度=零;
对于(int i=0;ia[i+1].getName().hashCode())
温度=a[i];
a[i]=a[i+1];
a[i+1]=温度;
}

这就是你的问题所在。
NullPointerException
不仅在尝试调用
null
上的方法时抛出;尝试通过
null
访问数组中的索引也会产生同样的效果。你必须实例化数组,尽管在你的情况下这是有问题的,因为你使用的是泛型类型。使用
ArrayList
而不是数组。

您从未为
a
赋值。在最顶端,您可以:

V[] a = null;
但在那之后,永远不要给它分配任何东西。因此,当你这样做时:

a[i] = ...

a为空,因此您会收到一个空指针异常。

我无法执行您上面写的操作,因为此错误将显示“无法创建Vuser a集合的常规数组,如ArrayList。或者,如果必须使用数组,请使用Object[]a=新对象[100];并且让程序在更大的输入上崩溃?坏主意。至于如何使用ArrayList:只需将所有数组索引访问实例替换为对get()和set()的调用。V[]a永远不会初始化。下次在代码上运行“findbugs”可以轻松捕获这些类型的错误。
V[] a = null;
a[i] = ...