Quando il concatenamento del costruttore, quale costruttore dovrebbe chiamare gli altri?

1

Quando ho una classe con più costruttori in cui un costruttore chiama un altro (concatenamento del costruttore), quale costruttore dovrebbe essere quello che chiamano tutti gli altri costruttori alla fine?

Ecco un esempio in cui il costruttore "all args" chiama il costruttore "no args":

class Goblin {
    // always starts at 10
    private int strength;
    private String name;

    public Goblin() {
        this.strength = 10;
    }

    public Goblin(String name) {
        this();
        this.name = name;
    }
}

Ecco un esempio in cui il costruttore "no args" chiama il costruttore "all args"

class Goblin {
    // always starts at 10
    private int strength;
    private String name;

    public Goblin() {
        this(null);
    }

    public Goblin(String name) {
        this.name = name;
        this.strength = 10;
    }
}

L'idea è che ci dovrebbe essere 1 posto dove this.strength = 10 e non dovrà essere copiato. Quale di questi è il migliore?

    
posta Charles Spencer 23.03.2018 - 15:39
fonte

4 risposte

5

Mi piacerebbe preferire il secondo approccio, in quanto ciò consente di dichiarare entrambi i membri come final e rendere la classe formalmente immutabile.

    
risposta data 23.03.2018 - 16:12
fonte
2

In generale, non importa. L'importante è mettere in catena i costruttori in modo da non ripetere il codice. Ma se il no-arg chiama uno con argomenti, o quello con args chiama il no-arg, entrambi realizzano la stessa cosa - creando un oggetto (valido) senza ripetizione del codice.

    
risposta data 23.03.2018 - 16:57
fonte
2

Il tuo primo approccio funziona solo fino a quando i tuoi valori predefiniti e i valori predefiniti per la corrispondenza datatype.

Se per esempio tutti i goblin costruiti con un costruttore vuoto dovrebbero essere chiamati "John", hai bisogno del secondo approccio, altrimenti hai this.name = nel tuo codice due volte.

    
risposta data 23.03.2018 - 17:23
fonte
0

Dovresti chiamare il costruttore con più argomenti. Si chiama Constructor Delegation in C ++ e ha lo scopo di riutilizzare il maggior numero possibile di codice.

    
risposta data 23.03.2018 - 15:50
fonte

Leggi altre domande sui tag