Hai bisogno di aiuto per capire il concatenamento del Costruttore

3

Sto cercando di capire meglio il concatenatore. Capisco che questa tecnica può essere utilizzata per ridurre la duplicazione del codice per l'inizializzazione di un oggetto di classe e capisco anche l'ordine in cui vengono eseguiti.

Ho trovato il seguente esempio e non riesco a vedere chiaramente quali sono i vantaggi nel codice? E se è necessario? Non capisco perché entrambi i costruttori abbiano una parola chiave ' this ', in quanto chiamare il costruttore (e passare i parametri rilevanti) ha lo stesso risultato?

//Constructors
public MyClass(double distance, double angle) : this(distance, angle, 0) 
{
}

public MyClass(double distance, double angle, double altitude) : this()
{
Distance = distance;
Angle = angle;
Altitude = altitude;
}
    
posta Theomax 04.06.2013 - 13:21
fonte

2 risposte

3

Innanzitutto, si ottiene una riduzione della duplicazione del codice poiché il costruttore principale è incatenato al secondo, passando in una 0 per il parametro altitude ; l'altro passato nei parametri viene passato al costruttore incatenato dai valori usati nel costruttore stesso (i parametri distance e angle ). La duplicazione ridotta è nel fatto che il secondo costruttore è quello che esegue l'inizializzazione e non è duplicato nel primo costruttore.

Un altro vantaggio è che ora hai sovraccaricato il costruttore in modo che il parametro altitude sia facoltativo e verrà impostato su 0 se non viene fornito.

Il secondo costruttore è incatenato a un costruttore senza parametri che non hai mostrato nell'esempio. Questo può benissimo inizializzare altre parti della classe - inizializzazione che non viene ripetuta altrove.

would calling either constructor (and passing in relevant parameters) have the same result?

Certo. Ma questo è un bel zucchero sintattico - rende il codice facile da leggere e breve.

    
risposta data 04.06.2013 - 13:30
fonte
0

A mio parere, il vantaggio più rilevante a parte il raggiungimento di una duplicazione di codice minima è che l'utilizzo di un oggetto con costruttori concatenati sempre produce oggetti inizializzati correttamente e completi con la quantità minima di codice eseguito, anche se il client non ha abbastanza informazioni sui valori dei parametri.

Un altro punto è che usando i costruttori concatenati, puoi ottenere più possibilità di costruzione gratuitamente se le usi in Pattern Costruttore Telescopico. Se ti trovi confuso con troppi parametri, considera invece il Pattern Builder. Joshua Bloch ha scritto sul refactoring in Elemento Java efficace 2 .

    
risposta data 04.06.2013 - 13:43
fonte

Leggi altre domande sui tag