2010-11-08 14 views
5

Eclipse ha un'impostazione del compilatore Java chiamata "la dichiarazione di campo nasconde un altro campo o variabile" che può essere impostato su avviso/errore.Avviso di eclissi "la dichiarazione di campo nasconde un altro campo o variabile"?

Quanto è importante questo avviso secondo te?

Qual è un buon modo standard per gestire questo problema?

Codice esempio di dove questo accade:

public class Test { 
    private String caption = null; 

    public Test(String caption) { // here 
    this.caption = caption; 
    } 
} 

ho visto soluzioni in cui il campo viene rinominato, vale a dire "fCaption", ma che avrebbe causato i getter automatiche/setter che possono essere genereated di avere dispari nomi (getfCaption()). Non illeggibile, ma brutto ...

Edit: Oh sì, v'è la possibilità di rinominare la firma del metodo Test(String caption_) o qualcosa di simile, ma che finirebbe nel javadoc cercando strano.

+0

Il mio non si lamenta affatto .... –

risposta

6

Questa è un'opzione molto utile a mio parere e dovrebbe essere abilitata per mostrare un avvertimento del compilatore. C'è un'opzione (nella mia versione almeno Eclipse 3.5.2, Java EE feature 1.2.2) per abilitarla/disabilitarla ulteriormente all'interno di costruttori e getter/setter per prevenire falsi positivi.

eclipse compiler settings

+0

concordato, nome shadowing può causare lievi errori, soprattutto se non si utilizza la parola chiave this come prefisso eventuali variabili di classe. Tuttavia, sembra stupido per i costruttori e setter/getter –

+0

Tuttavia: non fare il nome shadowing può causare anche errori sottili. Al contrario, come se un metodo acceda a un campo piuttosto che al suo parametro, se le persone applicano le convenzioni secondo cui i parametri hanno un suffisso _p, ma poi dimenticano questo nella loro implementazione. – zedoo

1

Direi che basta disabilitare questo avviso: sembra non esserlo nella convenzione. E non c'è da meravigliarsi che venga ignorato di default.

+0

È un'impostazione che è disabilitata per impostazione predefinita in eclissi. Nelle preferenze, Java - compilatore - errori/avvertenze, sotto "Nome shadowing e conflitti" – Fredrik

0

I mantenere questi impostati su "Error". Se una classe e della sua controllante entrambi hanno un campo con lo stesso nome non voglio perdere nessuno del mio tempo a cercare di capire il motivo per cui mi sembra di assegnare un valore al campo ma non sembra mai cambiare!

Problemi correlati