2009-08-03 80 views
0

HashMapList保持其元件一個HashMap內),當我調用添加方法此錯誤消息將被顯示在檢測控制檯」異常在線程‘主’顯示java.lang.NullPointerException「異常在線程‘主’顯示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); 

} 
} 

謝謝,我已經解決了第一個問題但是當我調用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(名單)基本打印此列表; 這句話會顯示被在檢測控制檯:[[email protected][email protected][email protected]]

+0

只是在上面......投擲時的產品名稱爲null就像一個新的異常時,總是把一個字符串中解釋了爲什麼這個空不應該發生在構造函數中的代碼有幾點建議。這可能聽起來微不足道,但是當你以後會閱讀你的日誌時,你會感謝你向自己解釋我們你沒有正確使用你的類和方法。這將節省你去的時候oogles「害羞是此異常拋出在這裏......」到「我傻......忘記調用構造函數之前的變量賦值」 – Newtopian 2009-08-03 05:32:44

+0

另一個指針:而不是再在每個後代聲明名稱變量,要麼使其受到保護,要麼在產品級創建訪問者。你這樣做的方式大多數情況下都會起作用,但當代碼訪問子變量的名稱時,如果父變量包含數據,你會得到奇怪的副作用。右邊有怪異的空指針異常的好來源...反正...我的兩個分:-) – Newtopian 2009-08-03 05:35:49

回答

2

關於第二個問題,你應該開始另一個線程。它正確地打印對象的字符串表示形式。您的Book類不提供自定義覆蓋的toString()方法。所以它使用從Object繼承的那個,它只返回一個由類的全名和對象的名稱組成的字符串,這就是你所看到的。如果你想看到不同的東西,你應該重寫toString()方法。

3

你是不是任何分配映射

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

每當你得到一個空指針異常找,你到你正在使用的值賦給變量。在這裏尋找代碼中你認爲「map = ...」的任何地方。

2

看看你的構造。

new HashMap<Integer, V>(); 

應該

map = new HashMap<Integer, V>(); 
相關問題