HashMapListはその要素をHashMap内に保持します。addメソッドを呼び出すと、このエラーメッセージが"スレッド内の例外 "メイン" java.lang.NullPointerExceptionが"スレッドmain" java.lang.NullPointerExceptionの例外 "HashMapListへの追加時
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);
}
}
おかげで、私は最初の問題を解決したが、私は==>
HashMapList<Integer, Book> list = new HashMapList<Integer, Book>();
list.add(0, new Book("physics"));
とBookクラス==>
あるようにメソッドを追加呼び出すときpublic class Book extends Product {
public String name = null;
public Book(String name) {
super(name);
}
}
とProductクラス==>
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(リスト)と基本的には、このリストを印刷したいとき。 この文はconcoleに表示されます。[[email protected]、[email protected]、[email protected]]
上記のコードのほんの少しのポインタ...製品名がnullのような新しい例外を投げるとき、常にこのnullが起こらない理由を説明する文字列をコンストラクタに入れてください。時には些細なことかもしれませんが、後で自分のログを読んでいるときは、クラスとメソッドを正しく使用しなかったことを自分自身に説明することから感謝します。これは、 "恥ずかしがり屋ここに投げ込まれたこの例外は..."から "時代遅れの私はコンストラクタを呼び出す前に変数を代入するのを忘れた"というような時間の節約になります – Newtopian
別のポインタ:各子孫でname変数を再宣言するのではなく、それを保護するか、製品レベルでアクセサーを作成します。あなたがそれをやっているやり方はほとんどの場合はうまくいくでしょうが、データが含まれている親の変数であるときに、コードが子の名前変数にアクセスしているときに、あなたは奇妙な副作用を受けるでしょう。とにかく...私の2セント:-) – Newtopian
マップ=新しいハッシュマップ(...問題? – CsTamas