2011-10-15 13 views
40

sto ottenendo questo errore checkstyle:Checkstyle: Come risolvere "Campo Nascosto" Errore

'serverURL' hides a field 

in questo

private static void setServerURL(final String serverURL) { 
    Utility.serverURL = serverURL; 
} 

Quale potrebbe essere la ragione, e come risolverlo?

risposta

35

C'è già una variabile definita serverURL che è disponibile a questo metodo (aggiuntivo al parametro formale si accettano). Questo è chiamato "shadowing".

penso maggior parte dei programmatori Java trasformano questo spuntare, perché non è poi così confusa.

Per esempio, questo potrebbe innescare l'errore:

public class Foo { 
    private int bar = 0; 

    public void someMethod(int bar) { 
    // There are two bars! All references in this method will use the parameter bar, 
    // unless they are explicitly prefixed with 'this'. 
    this.bar = bar; 
    } 
} 
+1

Come vedi il metodo è statico, non posso usare questo – Romi

+5

@CoryKendall Che cosa proponi è la soluzione a questo problema? –

+0

La soluzione è di disattivare il controllo, o di cambiare il nome di uno dei 'bar' in qualcos'altro. –

6

Il parametro ed il campo statico hanno lo stesso nome. Basta rinominare uno di loro. Alcune persone seguono una convenzione di denominazione, che viene anteposta tutti i parametri con p. Poi si dovrebbe serverURL come nome del campo e pServerURL come nome del parametro. Oppure potresti semplicemente disattivare il controllo.

6

ho risolto facendo disabilitarlo in Eclipse. Stavo cercando come farlo quando sono atterrato su questa pagina. Non ho trovato la risposta nella top 10 query di Google, quindi ho dovuto capirlo nel modo più difficile. Per chi è alla ricerca di che, ecco come ho fatto:

Aprire

Eclipse> Preferenze> Checkstyle

Trovare la configurazione checkstyle che si sta utilizzando (si potrebbe avere impostato che o si sta usando di default nel qual caso è una idea migliore per crearne una copia e quindi modificarla). Selezionalo e quindi fai clic sul pulsante Configura sul lato destro. Trovare la seguente configurazione nella lista:

Coding problemi> Campo nascosto

Aprire la configurazione (c'è pulsante chiamato 'aperto' nell'interfaccia utente).

Deseleziona 'Parametri Dichiarazione'. Fare clic su OK, quindi fare clic su OK, quindi fare clic su OK.

+0

Per qualche motivo il mio stile di controllo aveva più opzioni "campo nascosto" in "Problemi di codifica". Ho disabilitato tutti, quindi ne ho abilitato uno e ho seguito le istruzioni precedenti e ha funzionato. Volevo fare una spina per chiarimenti nel caso in cui altri hanno lo stesso problema. –

+0

Che ne dici di correggere il codice piuttosto che girare il correttore? vedi la risposta di Cory Kendall –

+0

@Hannes Sure. Questa è esattamente la soluzione ** checkstyle ** che suggerisce all'utente. Tuttavia, le persone che arrivano su questa pagina stanno cercando modi per far sì che il check-up non si arresti. –

2

basta cambiare ur param name in ur metodo

private static void setServerURL(final String serverURL) { 
Utility.serverURL = serverURL; 
} 

a

private static void setServerURL(final String serverURLXYZ) { 
Utility.serverURL = serverURLXYZ; 
} 

Enjoy ...

Jigar Patel

26

penso che è molto comune nei costruttori e setter che il nome del campo impostato è uguale al nome del parametro setter. Questo è il motivo per cui raccomando questa configurazione:

<module name="HiddenField" > 
    <property name="ignoreSetter" value="true" /> 
    <property name="ignoreConstructorParameter" value="true" /> 
</module> 

In questo modo gli altri casi di campo nascosti sono ancora vietati.

Problemi correlati