Je rencontre des problèmes lors de l'utilisation de plusieurs constructeurs dans java.Constructeur surchargé appelant un autre constructeur, mais pas en tant que première instruction
ce que je veux faire est quelque chose comme ceci:
public class MyClass {
// first constructor
public MyClass(arg1, arg2, arg3) {
// do some construction
}
// second constructor
public MyClass(arg1) {
// do some stuff to calculate arg2 and arg3
this(arg1, arg2, arg3);
}
}
mais je ne peux pas, puisque le second constructeur ne peut pas appeler un autre constructeur, à moins qu'il est la première ligne.
Quelle est la solution courante pour une telle situation? Je ne peux pas calculer arg2 et arg3 "en ligne". Je pensais que peut-être créer une méthode d'assistance de la construction, qui fera la construction proprement dite, mais je ne suis pas sûr que ce soit si « joli » ...
EDIT: En utilisant une méthode d'assistance est également problématique puisque certains de mes champs sont définitifs, et je ne peux pas les définir en utilisant une méthode d'aide.
Parfois, il peut être utile d'avoir une option pour lancer une exception et c'est une mauvaise habitude de la jeter des constructeurs. Pour ces situations, la méthode d'usine est meilleure. – Gaim
Je préfère nettement la deuxième option, si vous mettez la méthode d'usine dans la classe elle-même plutôt que dans une classe différente. La première option ne vous permet pas de faire les champs que vous affectez avec les valeurs de paramètre 'final'. Le compilateur ne peut pas dire que la méthode 'init' est appelée une fois dans chaque constructeur, et jamais en dehors d'un constructeur. Si vous n'aimez pas la méthode d'usine, consultez ma réponse pour une autre option sur le calcul d'autres paramètres. – Jorn
@Jorn Je suis avec Steve Yegge sur les usines, ils m'ont toujours agacé. –