HashMapList conserve ses éléments dans un HashMap) et quand j'appelle la méthode add ce message d'erreur sera affiché dans la console" Exception dans le thread "main" java.lang.NullPointerException"Exception dans le thread" principal "java.lang.NullPointerException lors de l'ajout à une 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);
}
}
merci, j'ai résolu le premier problème mais quand je l'appelle méthode ajouter comme ==>
HashMapList<Integer, Book> list = new HashMapList<Integer, Book>();
list.add(0, new Book("physics"));
et classe livre est ==>
public class Book extends Product {
public String name = null;
public Book(String name) {
super(name);
}
}
et la classe de produit est ==>
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;
}
}
Et quand je veux imprimer cette liste essentiellement avec System.out.println (liste); cette phrase sera affiché dans le concole: [[email protected], [email protected], [email protected]]
juste quelques pointeurs sur le code ci-dessus ... lors du lancement d'une nouvelle exception comme lorsque le nom du produit est nul, mettez toujours une chaîne dans le constructeur qui explique pourquoi cette valeur nulle ne devrait pas arriver. Cela peut sembler trivial parfois mais quand vous lirez vos logs plus tard, vous vous remercierez de vous expliquer que vous n'avez pas utilisé votre classe et vos méthodes correctement. cela vous sauvera des oogles de temps allant de "timide est cette exception jeté ici ..." à "idiot moi ... oublié d'assigner la variable avant d'appeler le constructeur" – Newtopian
Un autre pointeur: au lieu de re déclarer la variable de nom à chaque descendant , soit le rendre protégé ou créer des accesseurs au niveau du produit. La façon dont vous le faites fonctionnera la plupart du temps mais vous obtiendrez des effets secondaires étranges quand le code accède à la variable de nom de l'enfant quand c'est la variable du parent qui contient les données. À droite il y a une bonne source d'exceptions étranges de pointeur nul ... Quoi qu'il en soit ... mes deux cents :-) – Newtopian
Qu'est-ce qui ne va pas après avoir corrigé la carte = new Hashmap (... problème? – CsTamas