J'écris une application Android en Java. Ma classe a deux constructeurs - un est utilisé lorsque les données sont passées directement et le second si la classe doit désérialiser les données du bundle. Tout ressemble plus à ce qui suit:Comment grouper les initialisations communes dans les constructeurs?
public class MyClass {
private final ObservableInt myField;
private final int data;
public MyClass(int data) {
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
this.data = data;
}
public MyClass(Bundle bundle) {
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
this.data = bundle.getInt("SomeName");
}
}
Considérons le ci-dessus un exemple simple. J'ai beaucoup plus de champs finaux à remplir et aussi beaucoup plus de champs de type data
.
noter maintenant que ce code est répété dans chaque constructeur:
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
Je voudrais factoriser à seul endroit pour éviter les problèmes SECS. J'ai essayé de créer le constructeur privé et appelez this()
dans chacun des constructeurs ci-dessus, mais le compilateur se plaint, ce champ "de données" n'a pas été initialisé et je ne veux pas le passer par le paramètre à ce constructeur privé, parce que dans mon Il y a beaucoup de data
à remplir.
c'est ce qu'il a déjà et ce qu'il ne veut plus ne pas répéter le 'this.data =' deux fois (si j'ai compris sa question) –
@PierGiorgioMisley Non, pas vraiment. Je ne veux pas répéter 'myField = new ObservableInt()' et 'myField.addOnChangeListener (myListener);'. Je suppose que cela peut effectivement résoudre mon problème. – Spook
@Spook oooh alors je dois probablement me rendormir! Désolé pour mon incompréhension! –