«Исключение в потоке» main »java.lang.NullPointerException при добавлении в HashMapList - PullRequest
0 голосов
/ 03 августа 2009

HashMapList хранит свои элементы внутри HashMap), и когда я вызываю метод add, это сообщение об ошибке будет отображаться в консоли "Exception in thread" main "java.lang.NullPointerException

public class HashMapList<K, V extends Product> extends AbstractList<Product> {
public V element;

public int index;

Map<Integer, V> map;

public HashMapList() {
    super();
    new HashMap<Integer, V>();
 }

// Override
public void add(int index, V element) {
    map.put(new Integer(index), element);

 }
}  

спасибо, я решил первую проблему , но когда я вызываю метод add вроде ==>

HashMapList<Integer, Book> list = new HashMapList<Integer, Book>();
list.add(0, new Book("physics"));

и класс Книги ==>

public class Book extends Product {
public String name = null;
public Book(String name) {
    super(name);

   }
 }

и класс продукта ==>

public class Product implements Comparable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private String name = null;

public Product(String name) {
    if (name == null)
        throw new NullPointerException();
    this.name = name;
  }

public String getName() {
    return name;
  }

// Override

public int compareTo(Object o) {
    Product product = (Product) o;
    int compare = getName().compareTo(product.name);
    return compare;
  }
 }

И когда я хочу напечатать этот список в основном с помощью System.out.println (list); это предложение будет показано в консоли: [org.bihe.com1112.Book@1fb8ee3, org.bihe.com1112.Book@61de33, org.bihe.com1112.Book@14318bb]

Ответы [ 3 ]

3 голосов
/ 03 августа 2009

Вы ничего не назначаете на карту

public HashMapList() {
    super();
    map = new HashMap<Integer, V>();
}

всякий раз, когда вы получаете исключение нулевого указателя, ищите, где вы присваиваете значение используемой переменной. Здесь ищите где-нибудь в вашем коде, где вы говорите "map = ...".

2 голосов
/ 03 августа 2009

Для вашего второго вопроса, вы действительно должны начать другую тему. Он правильно печатает строковое представление вашего объекта. Ваш класс Book не предоставляет пользовательский переопределенный метод toString(). Таким образом, он использует тот, что унаследован от Object, который просто возвращает строку, состоящую из полного имени класса и hashCode объекта, который вы видите. Вы должны переопределить метод toString(), если хотите увидеть что-то другое.

2 голосов
/ 03 августа 2009

посмотрите на своего конструктора.

new HashMap<Integer, V>();

должно быть

map = new HashMap<Integer, V>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...