Initialisieren final Felder in Java

Habe ich eine Klasse mit vielen final-Mitglieder, die instanziiert werden können mit einem der beiden Konstruktoren. Die Konstruktoren haben einige code, der gespeichert ist in einer Dritten Konstruktor.

//SubTypeOne and SubTypeTwo both extend SuperType

public class MyClass {
    private final SomeType one;
    private final SuperType two;


    private MyClass(SomeType commonArg) {
        one = commonArg;
    }

    public MyClass(SomeType commonArg, int intIn) {
        this(commonArg);

        two = new SubTypeOne(intIn);
    }

    public MyClass(SomeType commonArg, String stringIn) {
        this(commonArg);

        two = new SubTypeTwo(stringIn);
    }

Das problem ist, dass dieser code nicht kompilieren: Variable 'two' might not have been initialized. Jemand könnte möglicherweise rufen Sie den ersten Konstruktor von innen MyClass, und dann das neue Objekt hätte keine "zwei" - Feld gesetzt.

Also, was ist die bevorzugte Methode zum teilen von code zwischen Konstruktoren in diesem Fall? Normalerweise würde ich eine helper-Methode, aber der freigegebene code muss in der Lage sein, die endgültige Variablen, die nur aus einem Konstruktor.

Es ist schwer zu verstehen, Ihre Frage, wie derzeit haben Sie zwei identisch Konstruktoren (gleiche Parameter, gleiche Stelle). Kann man das lösen, dass es mehr sein Vertreter?
In den ersten Konstruktor, zwei ist nicht initialisiert.
Skeet - Look wieder, die Parametertypen unterschiedlich sind.
Danke, ja, ich verpasst hatte. Doh.

InformationsquelleAutor Brian Gordon | 2013-02-15

Schreibe einen Kommentar