168 votes

Valeur d'un champ générique de Reflection

J'essaie d'obtenir la valeur d'un champ par réflexion. Le problème est que je ne connais pas le type du champ et que je dois le décider en obtenant la valeur.

Ce code résulte avec cette exception :

Impossible de définir le champ com....fieldName de java.lang.String en 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 faire un casting, mais j'obtiens des erreurs de compilation :

field.get((targetType)objectValue)

ou

targetType objectValue = targetType.newInstance();

Comment puis-je le faire ?

2voto

Isaias Carrera Points 195

Je poste ma solution en Kotlin, mais elle peut aussi fonctionner avec des objets java. Je crée une extension de fonction pour que n'importe quel objet puisse utiliser cette fonction.

fun Any.iterateOverComponents() {

val fields = this.javaClass.declaredFields

fields.forEachIndexed { i, field ->

    fields[i].isAccessible = true
    // get value of the fields
    val value = fields[i].get(this)

    // print result
    Log.w("Msg", "Value of Field "
            + fields[i].name
            + " is " + value)
}}

Jetez un coup d'œil à cette page web : https://www.geeksforgeeks.org/field-get-method-in-java-with-examples/

-1voto

Seba Points 1460

Vous appelez avec le mauvais argument.

Il devrait l'être :

Object value = field.get(object);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X