Ich versuche, Feldwert durch Reflexion zu erhalten. Das Problem ist, dass ich den Feldtyp nicht kenne und ihn entscheiden muss, während ich den Wert erhalte.
Dieser Code führt zu dieser Ausnahme:
Das Feld java.lang.String com .... fieldName kann nicht auf java.lang.String gesetzt werden
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Class<?> targetType = field.getType();
Object objectValue = targetType.newInstance();
Object value = field.get(objectValue);
Ich habe versucht zu besetzen, aber ich erhalte Kompilierungsfehler:
field.get((targetType)objectValue)
oder
targetType objectValue = targetType.newInstance();
Wie kann ich das machen?
java
reflection
Ido Barash
quelle
quelle
field.get()
sollte seinobject
, nichtobjectValue
.Antworten:
Wie zuvor beantwortet, sollten Sie verwenden:
Ein anderer Weg, der manchmal bevorzugt wird, besteht darin, den Getter dynamisch aufzurufen. Beispielcode:
Beachten Sie auch, dass Sie das Feld rekursiv bestimmen müssen, wenn Ihre Klasse von einer anderen Klasse erbt. Zum Beispiel, um alle Felder einer bestimmten Klasse abzurufen.
quelle
BaseValidationObject
?object
Klasse hat die Methode nichtgetMethods()
. Irgendwelche Ratschläge?Sie sollten das Pass - Objekt zu erhalten Methode des Feldes , so
quelle
object.getClass()
gibt Ihnen diesesobject
Das Snippet ist nicht definiert, sodass die Leser nicht verstehen können, wie es verwendet wird.object
unser Zielobjekt / unsere Zielinstanz bedeutet, mit der wir arbeiten. Ich denke, dass die Leser tatsächlich völlig in Ordnung sind mit dem, wasobject
in dieser Antwort steht.Ich verwende die Reflexionen in der toString () - Implementierung meiner Präferenzklasse, um die Klassenmitglieder und Werte anzuzeigen (einfaches und schnelles Debuggen).
Der vereinfachte Code, den ich verwende:
Ich hoffe, dass es jemandem hilft, denn ich habe auch gesucht.
quelle
Obwohl mir nicht wirklich klar ist, was Sie erreichen möchten, habe ich einen offensichtlichen Fehler in Ihrem Code festgestellt:
Field.get()
Erwartet das Objekt, das das Feld als Argument enthält, nicht einen (möglichen) Wert dieses Felds. Also solltest du habenfield.get(object)
.Da Sie scheinbar nach dem Feldwert suchen, können Sie diesen wie folgt erhalten:
Es ist nicht erforderlich, den Feldtyp zu instanziieren und einen leeren / Standardwert zu erstellen. oder vielleicht habe ich etwas verpasst.
quelle
object
ist nicht definiert, Leser können nicht verstehen, wie die Antwort anzuwenden ist.quelle
Sie rufen get mit dem falschen Argument auf.
Es sollte sein:
quelle
object
ist nicht definiert, Leser können nicht verstehen, wie man das Beispiel in der AntwortIch poste meine Lösung in Kotlin, aber sie kann auch mit Java-Objekten funktionieren. Ich erstelle eine Funktionserweiterung, damit jedes Objekt diese Funktion verwenden kann.
Schauen Sie sich diese Webseite an: https://www.geeksforgeeks.org/field-get-method-in-java-with-examples/
quelle
quelle