Bonjour,

J'ai un petit problème d'initialisation de champs dans une classe, et j'aimerais savoir ce que je fais de mal

Pour extrait les deux classes utilisées :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Accord extends Donnees {
  //Un champ de classe
  private ArrayList champ = null;
 
  //Constructeur
  public Accord(String[] champs){
    super(champs);
  }
 
  //Méthode appelée par la classe mère
  public void setChamps(){
    // Faute corrigée
    this.champ = new ArrayList();
    this.champ.add("Test");
  }
 
  //Retourne la liste
  public ArrayList getListeChamp(){
    return this.champ;
  }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
abstract public class Donnees {
  //Constructeur
  public Donnees(String[] champs){
    this.setChamps();
  }
 
  //Méthode abstract
  abstract public void setChamps();
}
Le problème est qu'après instanciation, l'ArrayList "champs" est null :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Accord obj = new Accord(blabla);
ArrayList uneListe = obj.getListeChamp();
//uneListe est null
En remplaçant "private ArrayList champ = null;" par "private ArrayList champ;", ça marche, mais je m'inquiète car je fais cette définition très souvent (ou "private ArrayList champ = new ArrayList();", et ça m'inquiète de ne pas avoir rencontré ce problème plus tôt.
Ai-je vraiment de quoi m'inquiéter, ou y-a-t-il quelque chose que je fais mal ?

Quels seraient les risques à remplacer toutes ces déclarations ("private ArrayList champ = null;" par "private ArrayList champ;") ?