2011-10-15 53 views
40

estoy recibiendo este error Checkstyle:Checkstyle: Cómo resolver "campo oculto" Error

'serverURL' hides a field 

en este

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

¿Cuál podría ser la razón, y la forma de resolverlo?

Respuesta

35

Ya existe una variable definida serverURL que está disponible para este método (adicional al parámetro formal que está aceptando). Esto se llama "sombra".

Creo que la mayoría de los programadores de Java desactivan este cheque, porque no es realmente tan confuso.

Por ejemplo, esto provocaría el error:

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

Como ve el método es estático, no puedo usar este – Romi

+5

@CoryKendall ¿Cuál es la solución a este problema? –

+0

La solución es desactivar el cheque u optar por el nombre de una de las 'barras 'de otra cosa. –

6

El parámetro y el campo estático tienen el mismo nombre. Simplemente cambie el nombre de uno de ellos. Algunas personas siguen una convención de nomenclatura que prefija todos los parámetros con p. Entonces tendría serverURL como nombre de campo y pServerURL como nombre de parámetro. O simplemente podría desactivar el cheque.

6

Lo resolví deshabilitándolo en eclipse. Estaba buscando cómo hacer eso cuando llegué a esta página. No encontré la respuesta en la consulta de Google Top 10, así que tuve que resolverlo de la manera difícil. Para alguien que está buscando para ello, aquí es cómo lo hice:

abierto

Eclipse> Preferencias> Checkstyle

Encuentra la configuración Checkstyle que está utilizando (es posible que haya establecido que o que está utilizando predeterminado, en cuyo caso es una mejor idea crear una copia propia y luego editarla). Seleccione eso y luego haga clic en el botón configurar en el lado derecho. Encuentra la siguiente configuración en la lista:

Codificación Problemas> Campo oculto

Abrir la configuración (no hay botón llamado 'abierta' en la interfaz de usuario).

Deseleccione 'Declaración de parámetros'. Haga clic en Aceptar y luego en Aceptar y luego en Aceptar.

+0

Por alguna razón, mi estilo de verificación tenía varias opciones de "campo oculto" en "Problemas de codificación". Inhabilité todos ellos, luego solo habilité uno y seguí las instrucciones anteriores y funcionó. Quería hacer un tapón para aclararlo en caso de que otros tengan el mismo problema. –

+0

¿Qué hay de la fijación del código que a la vuelta del inspector? ver la respuesta de Cory Kendall –

+0

@Hannes Sure. Esa es exactamente la solución que ** checkstyle ** sugiere al usuario. Sin embargo, las personas que aterrizan en esta página están buscando formas de hacer que el estilo de control deje de advertir sobre eso. –

2

Sólo cambia ur param name en ur método

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

a

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

Disfrute ...

Jigar Patel

26

Creo que es muy común en los constructores y establece que el nombre del campo establecido es el mismo que el nombre del parámetro setter. Es por eso que recomiendo esta configuración:

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

De esta manera, las otras cajas de campo oculto están prohibidas.