web-dev-qa-db-fra.com

Checkstyle: comment résoudre l'erreur "champ masqué"

Je reçois 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 être la raison et comment le résoudre?

51
Romi

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'observation".

Je pense que la plupart des programmeurs Java Java désactivent cette vérification, 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;
  }
}
47
Cory Kendall

Je pense qu'il est très courant chez les constructeurs et les setters que le nom du champ set 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.

35
WonderCsabo

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

8
barfuin

Je l'ai résolu en le désactivant dans Eclipse. Je cherchais comment faire cela quand j'ai atterri sur cette page. Je n'ai pas trouvé la réponse dans le top 10 des requêtes Google, j'ai donc dû le comprendre à la dure. Pour quelqu'un qui cherche ça, voici comment je l'ai fait:

Ouvrir

Eclipse> Préférences> Checkstyle

Trouvez la configuration de style de contrôle que vous utilisez (vous avez peut-être défini cela ou vous utilisez par défaut, auquel cas il est préférable de créer une copie de votre choix, puis de la modifier). Sélectionnez-le, puis cliquez sur le bouton de configuration sur le côté droit. Recherchez la configuration suivante dans la liste:

Problèmes de codage> Champ masqué

Ouvrez la configuration (il y a un bouton appelé "ouvert" dans l'interface utilisateur).

Désélectionnez "Déclaration des paramètres". Cliquez sur OK, puis sur OK, puis sur OK.

7
T A

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

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

à

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

Prendre plaisir...

Jigar Patel

5
user3550483

Erreur un peu stupide, mais voici la solution facile que je mets dans mes setters pour y remédier:

était:

public void setName(String name) {
  this.name = name;
}

mis à jour:

public void setName(String val) {
  this.name = val;
}
1
Forrest