2009-08-03 110 views
0

这是我收集我做:为什么会在这里抛出NullPointerException?

Test<v> map = new Test<V>(); 

,但是当我打电话的排序方法,我重写它的测试类,也MAP1是一个集合,我让它在测试类将保持元素我添加到地图集合中,这个异常将被抛出,它是第5行:a [i] = map.get(new Integer(i));

V[] a = null; 
    public void sort() { 
    V temp = null; 

    for (int i = 0; i < map1.size(); i++) { 

     a[i] = map1.get(new Integer(i)); 

     if (a[i].getName().hashCode() > a[i + 1].getName().hashCode()) 
      temp = a[i]; 
     a[i] = a[i + 1]; 
     a[i + 1] = temp; 

    } 
+0

V [] a从来没有初始化。您可以通过在下一次在代码上运行'findbugs'轻松捕获这些类型的错误。 – 2009-08-04 03:33:46

回答

10
V[] a = null; 
... 
a[i] = ... 

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

+0

我不能这样做,你在上面,因为会显示这个错误写的东西“不能创建V – Johanna 2009-08-03 13:52:43

4

您从未将值分配给a。在最高层你做:

V[] a = null; 

但是从来没有分配任何东西后。所以,当你这样做时:

a[i] = ... 

a是空的,所以你得到一个空指针异常。

相关问题