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?
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%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.
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% 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)
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.
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%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.
Tags und Links java reflection