2013-06-07 10 views
8

I miei compagni di squadra mi introducono a un nuovo metodo di scrittura pratica che non restituirà nulla.Pratica per restituire se stesso invece invalido in Java

public class Test { 
    public Test doCalculations() { 
     //code 
     return this; 
    } 
    public Test appendTitle(String test) { 
     //code 
     return this; 
    } 
} 

Invece di restituire il vuoto, suggeriscono di restituire l'oggetto stesso. Uno dei vantaggi di questo approccio che dicono, è possibile concatenare metodi.

Invece di scrivere:

while(1) { 
    test.appendTitle("aaa"); 
    test.doCalculations(); 
    map.add(test); 
} 

è possibile scrivere codice più elegante:

while(1) { 
    map.add(test.appendTitle("aaa").doCalculations()); 
} 

Quali potrebbero essere gli svantaggi di questo aproach? Suggerite di includerlo nell'uso quotidiano?

+3

Ti suggerisco di esaminare il modello di progettazione di un decoratore. Ovviamente dovresti pensare a quando applicarlo. –

+1

Chiamato _fluent interface_ (ma non esclusivamente). Suggerirei un'interruzione di riga prima di ogni '.'. –

+0

In mia difesa non ho trovato questa domanda: "Benefici ..", anche la domanda è così enigmatica, non penso che molte persone capiranno cosa sta succedendo. –

risposta

2

Direi che non è una buona pratica. Osservando la firma del metodo che restituisce un oggetto, come posso sapere se si tratta di un'istanza completamente nuova che viene restituita o di quello esistente che viene restituito. Si tenga presente che in caso di metodi immutabili modificati le classi restituiscono una nuova istanza classe.

+4

Se la classe è chiamata 'Builder' o qualcosa di simile, è piuttosto chiara IMO. – assylias

+0

Vero ma questa domanda sembra essere più generale di quella –

+1

Non è una cattiva pratica, infatti è usata per molti oggetti di configurazione, oggetti di costruzione e, diavolo, dovrebbe essere usata ovunque dove i setter possono essere richiamati più di 1 2 volte. Dovrebbe essere abbastanza ovvio che restituisce sé stesso e non una nuova istanza, altrimenti, javadoc dovrebbe dichiararlo chiaramente. Esempi che usano quel modello: Hibernate Criteria, Astyanax, Cloudado's hadoop config e molti altri. Sicuramente i loro sviluppatori sanno una cosa o due sullo sviluppo di apis, quindi a mio parere la risposta accettata è totalmente sbagliata. –

Problemi correlati