Den Namen einer Eigenschaft / eines Felds mit der Getter-Methode einer Pojo / Java-Bean erhalten?

8

Ich habe eine untere Klasse und ich brauche Feldnamen von Getter-Methode mit Java-Reflektion. Ist es möglich, den Feldnamen oder den Eigenschaftsnamen mit der Getter-Methode zu erhalten?

%Vor%

Meine Fragen sind: Kann ich Feld / Eigenschaft Name von Getter-Methode erhalten? Wenn ich getName () verwende, kann ich eine name -Eigenschaft bekommen? Ich brauche eine Namenseigenschaft, aber nicht ihren Wert. Ist es durch Java-Reflektion möglich?

    
user1016403 02.11.2012, 09:42
quelle

9 Antworten

12

Ja, es ist 100% möglich ..

%Vor%     
Vishal Zanzrukia 22.11.2012 14:14
quelle
7

Es ist nicht gerade gut genug, um einfach das Präfix "get" oder "is" zu entfernen und den ersten Buchstaben klein zu schreiben. Zum Beispiel wäre der passende Bean-Name für getID ID und nicht ID.

Der einfachste Weg, den Bean-Namen zu erhalten, besteht darin, das Präfix "get" oder "is" auszulassen und das Ergebnis dann an Introspector.decapitalize .

Hier ist eine Methode, die ich geschrieben habe, um genau das zu tun:

%Vor%     
Jason Thompson 07.04.2015 19:38
quelle
5

Sie können nicht überprüfen, welcher Code mit Reflektion funktioniert.

Sie können davon ausgehen, dass eine getName() -Methode ein Feld namens name liest und sonst nichts tut. Es besteht jedoch keine Notwendigkeit dafür. z.B. Der Feldname könnte m_name oder _name oder nameField oder nicht einmal ein Feld sein.

    
Peter Lawrey 02.11.2012 09:45
quelle
1

Wenn Ihre Beans den JavaBean-Konventionen folgen, verwenden Sie die Reflektion, um alle Methoden "get" und "is" zu erhalten und die Präfixe "get" oder "is" aus den abgerufenen Methodennamen zu entfernen und die Feldnamen zu haben.

Aktualisieren

%Vor%     
Aravind R. Yarram 02.11.2012 09:45
quelle
0

Sie sollten auf die Methode zugreifen. Im Moment würde der Getter das Mitglied name zurückgeben, aber das könnte sich in Zukunft ändern . Es könnte dies aus einer Datenbank oder einem Webservice instanziieren, es aus einem Vornamen / Nachnamen usw. aufbauen. Das name -Feld könnte sehr wahrscheinlich nicht existieren.

Also gehen Sie immer durch die Methode (sogar durch Reflexion)

    
Brian Agnew 02.11.2012 09:47
quelle
0

Sie können

%Vor%     
vels4j 02.11.2012 09:47
quelle
0

Wenn Sie den Namen der Methode kennen, müssen Sie nur "get" entfernen und den folgenden Buchstaben in den unteren Buchstaben umwandeln, so dass Sie keine Spiegelung benötigen.

Wenn die Getter-Methode (getName ()) eine Eigenschaft mit einem anderen Namen als "name" zurückgibt, können Sie den Namen der Eigenschaft nicht vom Namen der Methode erhalten.

Wenn Sie den Namen der Methode nicht kennen, können Sie durch Nachdenken alle Methoden erhalten und Sie können auch alle Eigenschaften des Namens erhalten.

    
Chuidiang 02.11.2012 09:51
quelle
0

Mit Hilfe der Reflections-API können POJO-Felder wie folgt abgerufen werden. Vererbte Klasse kann hier ein Problem finden.

%Vor%

Oder man kann mithilfe der Reflections-API auch alle Methoden in einer Klasse abrufen und durch iterieren, um die Attributnamen zu finden (Standard-POJO-Methoden beginnen mit get / is / set) ... Dieser Ansatz funktionierte für die Inherited-Klasse Struktur.

%Vor%

Ein interessanterer Ansatz ist jedoch unten:

Mit Hilfe der Jackson-Bibliothek konnte ich alle Klasseneigenschaften vom Typ String / integer / double und die entsprechenden Werte in einer Map-Klasse finden. ( alles ohne Reflexionen api! )

%Vor%     
Amit Kaneria 22.03.2017 21:51
quelle
-1

Versuchen Sie Folgendes

%Vor%

}

Die Methode get wird verwendet, um Daten dynamisch aus der Programmmethode oder aus der Datenbank abzurufen. Es spiegelt nur Werte wider, die nicht die Eigenschaft des Wertes sind.

    
user1242347 02.11.2012 11:35
quelle

Tags und Links