HashMapList는 HashMap 안에 요소를 유지합니다. add 메소드를 호출하면이 오류 메시지가"예외 스레드 "메인" java.lang.NullPointerException이"HashMapList에 추가 할 때"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);
}
}
덕분에, 나는 첫 번째 문제를 해결 한하지만 난 == 같은 방법을 추가 호출 할 때>
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 (목록)을 기본적으로이 목록을 인쇄 할 때 이 문장은 concole에 표시됩니다 : [[email protected], [email protected], [email protected]]을
위의 코드에있는 몇 가지 포인터 ... 제품 이름이 null 인 경우와 같이 새 예외를 throw 할 때 항상이 null이 발생하지 않아야하는 이유를 설명하는 문자열을 생성자에 넣으십시오. 때로는 사소한 것처럼 들릴지 모르지만 나중에 로그를 읽을 때 자신의 수업과 방법을 올바르게 사용하지 않았다고 자신에게 설명 할 때 감사 할 것입니다. 이것은 "당신이 생성자를 호출하기 전에 변수를 할당하는 것을 잊어 버렸습니다."라는 말로 "여기에 던져진이 수사슴은 ..."이라는 수줍음을 피할 수 있습니다. – Newtopian
다른 포인터 : 각 자손에서 name 변수를 다시 선언하는 대신 , 보호하거나 제품 레벨에서 접근자를 생성하십시오. 당신이하는 일은 대부분의 경우에 효과가 있지만, 데이터가 포함 된 부모 변수 일 때 코드가 자식 이름 변수에 액세스 할 때 이상한 부작용이 발생합니다. 바로 이상한 널 포인터 예외의 좋은 원천이 있습니다 ... 어쨌든 ... 내 2 센트 :-) – Newtopian
지도 = 새 해시 맵 (... 문제? – CsTamas