2010-02-21 9 views
5

ho notato in un sacco di persone che fanno in setter Java:Java setter e "questo"

1)

public void setX(int x) { 
    this.x = x; 
} 

Personalmente non mi piace questo e penso che dovrebbe essere qualcosa di simile:

2)

public void setX(int newX) { 
    x = newX; 
} 

Esistono ragioni la prima sarebbe meglio?

Non è 1) più facile effettuare un errore con. Su un paio di occasioni ho rintracciato bug nel codice fino a persone che fanno:

x = x; 

per sbaglio, forse perché erano a digitare per digiunare e solo voluto ottenere i getter e setter fuori strada.

+1

Preferisco anche la prima opzione. Non sono sicuro del motivo per cui questo è stato downvoted però. – Jorn

+3

Eclipse utilizza automaticamente lo stile this.x = x quando genera getter e setter. Questo potrebbe essere il motivo per cui così tante persone usano quello stile. – chama

+0

Preferisco la seconda forma, non sempre usando 'newX' come nome dell'argomento, ma' this.x = x; 'è una forma di occultamento della variabile e quindi qualcosa che non userei. – rsp

risposta

14

È una questione di stile. L'argomento a favore di

public void setX(int x) { this.x = x; } 

è che non c'è bisogno di pensare a un nome nuovo e significativo per l'argomento di input, dal momento che avete già uno.

Scegliere uno stile e utilizzarlo in modo coerente.

+2

E se uno stile è già stato selezionato, attenersi a quello. – reccles

4

Non penso ci sia un "migliore" o "peggio" qui. È solo una questione di stile.

+0

Non è il primo più facile da fare un errore con. In alcune occasioni ho rintracciato bug nel codice per le persone che fanno: x = x; per errore, forse perché stavano digitando per digiunare e volevano solo ottenere i getter e setter di mezzo :) – Zubair

+6

Chi tipi getter e setter? Tutti gli IDE validi li genereranno per te. Se ti capita di "digitare troppo velocemente", tutti gli IDE utili ti diranno subito che "x = x" è sbagliato. – duffymo

+0

Perché stai digitando i tuoi setter semplici da soli comunque? Eseguire eclissi, fare clic, fare clic, fatto. – viraptor

7

motivi per preferire this.x = x:

  1. utilizzando this.x = x nei costruttori ed è un modello noto, che i programmatori Java riconoscono.
  2. Il x in entrambi i campi e il parametro rappresentano lo stesso valore.
  3. Con x = newX non c'è indicazione sintattica che uno sia un campo e l'altro un parametro.
1

Suppongo che i setter siano generati automaticamente dall'IDE. Quindi la mia preferenza è il modulo che viene utilizzato di default nell'IDE. Vale a dire, sono abbastanza neutrale e ritengo che non meriti di modificare le impostazioni IDE predefinite.

2

Preferisco this.x = x;. Non c'è davvero nessun modo giusto su questo. In un IDE, avrà un bell'aspetto per il colore in più su this.

+1

+1 per i colori! – bharal

3

È solo una convenzione di codifica. Sei libero di scegliere, ma usalo in modo coerente. Inoltre, un IDE medio può generare automaticamente tutti i getter/setter in pochi tasti/clic. In Eclipse, ad esempio, fare Alt +Maiusc +R e poi S e quindi selezionare le proprietà che desideri per generare getter/setter per e fare clic su OK. Inoltre, un IDE medio visualizzerà un avviso quando si esegue x = x anziché this.x = x.

Io stesso preferisco lo this.x = x.Anche Eclipse e molti strumenti di reverse engineering (come Dali e Hibernate Tools) lo generano in modo predefinito.

La convenzione x = newX (il Hungarian notation) è appena ereditata dal mondo della programmazione procedurale (vecchio stile) e semplicemente non si adatta perfettamente all'ideologia OO.

+0

Gli strumenti di inversione inversa richiedono "this.x = x" per essere compreso? – Zubair

+0

No, è solo una convenzione standard che aderiscono. – BalusC

+0

Sì, la tua destra. Credo di essere cresciuto su Microsoft C e C++, e quindi la notazione ungherese era una di quelle cose che non ho mai cresciuto, ma forse dovrei avere :) – Zubair

2

Se è il tuo codice o non fa parte di una base esistente, scegli quella che ti piace e segui. Se invece stai lavorando con codice esistente segui qualsiasi convenzione sia già in uso.

+0

Sì, sono d'accordo, la convenzione è più importante a volte – Zubair

3

E 'del tutto soggettivo, ma il primo modulo fornisce un bel metodo prototype chiaro nel javadoc ecc

non mi sento non c'è molto spazio per l'errore utilizzando il modulo 'this.x = x'. Sicuramente nulla che non verrà catturato dai test unitari. Hai dei test unitari, giusto?

+0

Ho test unitari si e scriverli sempre, ma rimarrai sorpreso dal numero di progetti su cui sono andato a finire in cui non hanno praticamente alcuna copertura di codice nei loro test unitari. – Zubair

+0

Sì. L'uso di un nome funky per il parametro (come newX o pX) rende i JavaDoc non validi. –