Checkstyle: So beheben Sie den „Hidden Field“-Fehler

Lesezeit: 3 Minuten

Benutzer-Avatar
Romi

Ich erhalte diesen Checkstyle-Fehler:

'serverURL' hides a field

in diesem

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

Was könnte der Grund sein und wie kann man ihn beheben?

Benutzer-Avatar
Cory Kendall

Es ist bereits eine Variable definiert serverURL die dieser Methode zur Verfügung steht (zusätzlich zu den formalen Parametern, die Sie akzeptieren). Dies wird als „Schattenbildung“ bezeichnet.

Ich denke, die meisten Java-Programmierer schalten dieses Häkchen aus, weil es nicht wirklich verwirrend ist.

Dies würde beispielsweise den Fehler auslösen:

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

  • Wie Sie sehen, ist die Methode statisch, ich kann dies nicht verwenden

    – Romi

    15. Oktober 2011 um 6:10 Uhr

  • @CoryKendall Was schlagen Sie als Lösung für dieses Problem vor?

    – IgorGanapolsky

    20. Februar 2014 um 16:58 Uhr

  • Die Lösung besteht darin, das Häkchen zu deaktivieren oder den Namen eines der zu ändern bars zu etwas anderem.

    – Cory Kendall

    7. November 2016 um 20:34 Uhr

  • Diese Antwort könnte verbessert werden, indem angegeben wird, wie dieser Prüfstil deaktiviert werden soll.

    – wachr

    17. Januar 2018 um 19:31 Uhr

Ich denke, es ist bei Konstruktoren und Settern sehr verbreitet, dass der Set-Feldname mit dem Setter-Parameternamen identisch ist. Deshalb empfehle ich diese Konfiguration:

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

Auf diese Weise sind die anderen Hidden-Field-Fälle immer noch verboten.

  • funktioniert immer noch nicht mit den obigen Eigenschaften in meiner Checkstyle-XML-Datei.

    – Gaurav

    21. Mai 2019 um 14:33 Uhr

Der Parameter und das statische Feld haben denselben Namen. Benennen Sie einfach einen von ihnen um. Einige Leute folgen einer Namenskonvention, die allen Parametern das Präfix voranstellt p. Dann hättest du serverURL als Feldname und pServerURL als Parametername. Oder Sie können die Überprüfung einfach deaktivieren.

Ich habe es gelöst, indem ich es in Eclipse deaktiviert habe. Ich habe gesucht, wie das geht, als ich auf dieser Seite gelandet bin. Ich habe die Antwort in den Top 10 der Google-Abfrage nicht gefunden, also musste ich es auf die harte Tour herausfinden. Für jemanden, der danach sucht, hier ist, wie ich es gemacht habe:

Offen

Eclipse>Einstellungen>Checkstyle

Suchen Sie die Checkstyle-Konfiguration, die Sie verwenden (möglicherweise haben Sie diese eingestellt oder Sie verwenden die Standardeinstellung. In diesem Fall ist es besser, eine eigene Kopie zu erstellen und diese dann zu bearbeiten). Wählen Sie das aus und klicken Sie dann auf die Schaltfläche Konfigurieren auf der rechten Seite. Suchen Sie die folgende Konfiguration in der Liste:

Codierungsprobleme > Verstecktes Feld

Öffnen Sie die Konfiguration (in der Benutzeroberfläche gibt es eine Schaltfläche namens „Öffnen“).

Deaktivieren Sie „Parameterdeklaration“. Klicken Sie auf OK, dann auf OK und dann auf OK.

Ändern Sie einfach Ihren Parameternamen in Ihrer Methode

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

zu

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

Genießen…

Jigar Patel

  • ahhhhhhhhhhhh!

    – Tucker

    30. Juni 2021 um 3:22 Uhr

Benutzer-Avatar
Wald

Irgendwie dummer Fehler, aber hier ist die einfache Lösung, die ich in meine Setter gesteckt habe, um ihn zu beheben:

war:

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

Aktualisiert:

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

  • ahhhhhhhhhhhh!

    – Tucker

    30. Juni 2021 um 3:22 Uhr

1179450cookie-checkCheckstyle: So beheben Sie den „Hidden Field“-Fehler

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy