J'essaie de recevoir la valeur du champ par réflexion. Le problème est que je ne connais pas le type de champs et que je dois le décider tout en obtenant la valeur.
Ce code résulte avec cette exception:
Impossible de définir le champ java.lang.String com .... fieldName sur java.lang.String
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Class<?> targetType = field.getType();
Object objectValue = targetType.newInstance();
Object value = field.get(objectValue);
J'ai essayé de lancer, mais j'obtiens des erreurs de compilation:
field.get((targetType)objectValue)
ou
targetType objectValue = targetType.newInstance();
Comment puis-je faire ceci?
java
reflection
Ido Barash
la source
la source
field.get()
devrait êtreobject
, nonobjectValue
.Réponses:
Comme indiqué précédemment, vous devez utiliser:
Une autre méthode, parfois préférée, consiste à appeler le getter dynamiquement. code d'exemple:
Sachez également que lorsque votre classe hérite d'une autre classe, vous devez déterminer de manière récursive le Field. par exemple, pour récupérer tous les champs d'une classe donnée;
la source
BaseValidationObject
?object
classe n'a pas la méthodegetMethods()
. Un conseil?Vous devez passer l' objet pour obtenir la méthode du champ , donc
la source
object.getClass()
vous retournera cet objet Class)object
dans l'extrait de code n'est pas défini, les lecteurs ne peuvent donc pas comprendre comment l'utiliser.object
signifie notre objet / instance cible avec lequel nous travaillons. Je pense que les lecteurs sont en fait totalement d'accord avec ce queobject
contient cette réponse.J'utilise les réflexions dans l'implémentation toString () de ma classe de préférence pour voir les membres de la classe et les valeurs (débogage simple et rapide).
Le code simplifié que j'utilise:
J'espère que cela aidera quelqu'un, car j'ai aussi cherché.
la source
Bien que je ne sache pas vraiment ce que vous essayez de réaliser, j'ai repéré une erreur évidente dans votre code:
Field.get()
attend l'objet qui contient le champ comme argument, pas une valeur (possible) de ce champ. Donc vous devriez avoirfield.get(object)
.Puisque vous semblez rechercher la valeur du champ, vous pouvez l'obtenir comme suit:
Pas besoin d'instancier le type de champ et de créer une valeur vide / par défaut; ou peut-être qu'il y a quelque chose que j'ai manqué.
la source
object
n'est pas défini, les lecteurs ne peuvent pas comprendre comment appliquer la réponse.la source
Vous appelez get avec le mauvais argument.
Ça devrait être:
la source
object
n'est pas défini, les lecteurs ne peuvent pas comprendre comment appliquer l'exemple dans la réponseJe poste ma solution dans Kotlin, mais elle peut également fonctionner avec des objets java. Je crée une extension de fonction pour que tout objet puisse utiliser cette fonction.
Jetez un œil à cette page Web: https://www.geeksforgeeks.org/field-get-method-in-java-with-examples/
la source
la source