75 votes

Checkstyle: Comment résoudre l'erreur "Champ caché"

J'obtiens cette erreur de style de contrôle :

 'serverURL' hides a field

dans ce

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

Quelle pourrait en être la raison et comment y remédier ?

61voto

Cory Kendall Points 3403

Il existe déjà une variable définie serverURL qui est disponible pour cette méthode (en plus du paramètre formel que vous acceptez). C'est ce qu'on appelle "l'ombrage".

Je pense que la plupart des programmeurs Java désactivent cette coche, car ce n'est pas vraiment déroutant.

Par exemple, cela déclencherait l'erreur :

 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;
  }
}

51voto

WonderCsabo Points 1282

Je pense qu'il est très courant dans les constructeurs et les setters que le nom du champ défini soit le même que le nom du paramètre setter. C'est pourquoi je recommande cette configuration :

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

De cette façon, les autres cas de champs cachés sont toujours interdits.

11voto

Thomas Points 3776

Le paramètre et le champ statique ont le même nom. Il suffit de renommer l'un d'entre eux. Certaines personnes suivent une convention de nommage qui préfixe tous les paramètres avec p . Ensuite, vous auriez serverURL comme nom de champ et pServerURL comme nom de paramètre. Ou vous pouvez simplement désactiver le chèque.

5voto

user3550483 Points 85

Changez simplement le nom de votre paramètre dans votre méthode

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

à

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

Prendre plaisir...

Jigar Patel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X