2009-08-03 6 views
0

это моя коллекция, которую я сделать:Почему исключение NullPointerException будет выбрано здесь?

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

, но когда я вызываю метод сортировки, который я переопределить его в класс Test, а также map1 это одна коллекция, которую я делаю это в классе Test, который будет сохраняет элементы Я добавляю к коллекции карт, это исключение будет выбрано для строки 5: a [i] = map.get (новое 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». –

ответ

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

Там ваша проблема. A NullPointerException не только бросается при попытке вызвать метод на null; попытка получить доступ к индексу в массиве через null будет иметь тот же эффект. Вам нужно создать экземпляр массива, хотя в вашем случае это проблематично, поскольку вы используете общий тип. Вместо массива используйте ArrayList.

+0

я не могу сделать то, что вы написали выше, так как будет показано эта ошибка "не может создать общий массив V – Johanna

+1

Используйте коллекцию как ArrayList вместо тогда. – banjollity

+0

Как я могу использовать ArrayList здесь ??? – Johanna

4

Вы никогда не назначали значение a. На самом верху вы делаете:

V[] a = null; 

но никогда не присваивайте ему ничего. Итак, когда вы это сделаете:

a[i] = ... 

a имеет значение null, поэтому вы получаете исключение нулевого указателя.

Смежные вопросы