2016-08-23 3 views
1

Wie lautet die richtige get-Methodenkonvention für eine boolesche Variable in einer Java-Klasse? Zum Beispiel:Benennungsstrategie für eine Java-Boolean-Lesemethode

private boolean qExist; 

public boolean isqExist() { 
    return qExist; 
} 
public void setqExist(boolean qExist) { 
    this.qExist = qExist; 
} 

Die oben genannten Methoden werden von Eclipse generiert. Während die wsimport erzeugt ‚qExist‘ in einer XSD-Datei als

public boolean isQExist() { 
    return qExist; 
} 
public void setQExist(boolean qExist) { 
    this.qExist = qExist; 
} 

Jackson JSON Serializer erwartet, dass die erste Methode in einer Klasse vorhanden sein sonst hängt sie den Wert der Variablen (in diesem Fall ‚qexist‘ - Kleinbuchstaben) zum JSON-Objekt. Wenn es an Web-Ui übergeben wurde, kennt JavaScript die Variable nicht, da sie "qExist" erwartet.

Dies kann ein Fehler in Jackson sein, denn wenn die boolesche Variable mit zwei oder mehr Kleinbuchstaben beginnt, geht Jackson mit der zweiten Methode oben.

Ich habe das Problem gelöst, indem ich dem Jackson Object Mapper gesagt habe, nicht nach Setter/Getter/Methoden für Werte zu suchen, sondern nach Feldern.

+5

Die Kapitalisierung des "Q" ist der übliche Weg. Eclipse ist nicht so hell. – Bohemian

+0

isQExist und setQExist ist die Standardbenennungskonvention, die in den meisten streng typisierten Sprachen verwendet wird. – Kenshin

+0

Als Hinweis auf Englisch ... wird "doesQExist" allgemein als grammatikalischer (und mehr * natürlicher *) akzeptiert als 'isQExist'. Ich bevorzuge es, die Lesbarkeit zu maximieren, anstatt mich den weniger nützlichen Aspekten der Java-Bean-Spezifikation zu sehr anzupassen. Jackson kann angewiesen werden, sich direkt auf das Feld zu beziehen, wie Sie herausgefunden haben. – nbrooks

Antwort

1

Normalerweise würden Sie jedes neue Wort nutzen - egal, wie viele Buchstaben hat

0

Aus Neugier, was ist das Q darstellen? Der Begriff "richtig" kann davon abhängen, wie Sie die Getter-/Einstellung in Reflektion verwenden. Ich würde verwenden:

public boolean isQExist() { 
    return qExist; 
} 
public void setQExist(boolean qExist) { 
    this.qExist = qExist; 
} 
+0

Tatsächlich werden die Getter- und Setter-Methoden von wsimport thru maven plugin generiert. Ich denke, das Hinzufügen von JSON-Anmerkungen ist keine gute Übung für generierten Code. Danke für die Eingaben. Ich möchte nur darauf hinweisen, dass die jackson-Bibliothek versagt, wenn sie einzelne Kleinbuchstaben im Vergleich zu mehreren hat, während sie Dinge serialisiert. –

0

Wenn Sie nicht das Feld direkt haben, verwenden wollen, Sie könnten nur die enge Kopplung an die POJO Struktur entfernen und Anmerkungen verwenden.

public static final String BLAH_PROPERTY = "qExists"; 

private boolean blah; 

@JsonProperty(BLAH_PROPERTY) 
public boolean isBlah() { 
    return blah; 
} 

@JsonProperty(BLAH_PROPERTY) 
public void setBlah(boolean blah) { 
    this.blah = blah; 
} 
Verwandte Themen