La première variante instanciera toujours la liste de tableaux, la seconde uniquement lors de l'appel du constructeur par défaut. Signification pour la deuxième solution, vous devrez appeler le constructeur par défaut pour tout constructeur supplémentaire que vous ajoutez par exemple.
public class Whatever {
private final List<String> myList;
public Whatever() {
myList = new ArrayList<String>();
}
public Whatever(String name) {
this();
// Other stuff done
}
public Whatever(List<String> myList) {
this.myList = myList;
}
}
Le (deuxième) « paresseux » méthode d'initialisation peut-être mieux si vous ne l'utilisez pas toujours la liste (par exemple, si vous définissez la liste dans un autre constructeur directement comme dans mon exemple) et que vous voulez éviter de créer inutilement objets. (EDIT: J'ai changé le ArrayList à une interface et l'ai défini final .Il n'était pas une partie de la question mais c'est - comme mentionné dans les commentaires - la meilleure manière d'employer des collections de liste).
Une note connexe, il est préférable de le faire: Liste privée myList = new ArrayList () –
sateesh
Il est encore plus préférable de le faire: 'Liste finale privée myList = new ArrayList ();' –
Bombe