Estoy tratando de recibir el valor del campo a través de la reflexión. El problema es que no sé el tipo de campo y tengo que decidirlo mientras obtengo el valor.
Este código resulta con esta excepción:
No se puede establecer java.lang.String field com .... fieldName 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);
Traté de emitir, pero recibo errores de compilación:
field.get((targetType)objectValue)
o
targetType objectValue = targetType.newInstance();
¿Cómo puedo hacer esto?
java
reflection
Ido Barash
fuente
fuente
field.get()
debería serobject
, noobjectValue
.Respuestas:
Como respondió antes, debe usar:
Otra forma, que a veces se prefiere, es llamar al captador de forma dinámica. código de ejemplo:
También tenga en cuenta que cuando su clase hereda de otra clase, debe determinar recursivamente el campo. por ejemplo, para buscar todos los campos de una clase determinada;
fuente
BaseValidationObject
?object
clase no tiene el métodogetMethods()
. ¿Algún consejo?Debe pasar el objeto para obtener el método del campo , por lo que
fuente
object.getClass()
le devolverá este objeto de clase)object
en el fragmento no está definido, por lo que los lectores no pueden entender cómo usarlo.object
significa nuestro objeto / instancia de destino con el que trabajamos. Creo que los lectores están totalmente de acuerdo con lo que hayobject
en esta respuesta.Utilizo las reflexiones en la implementación toString () de mi clase de preferencia para ver los miembros y valores de la clase (depuración simple y rápida).
El código simplificado que estoy usando:
Espero que ayude a alguien, porque también he buscado.
fuente
Aunque en realidad no está claro para mí lo que está tratando de lograr, detecté un error obvio en su código:
Field.get()
espera el objeto que contiene el campo como argumento, no algún valor (posible) de ese campo. Entonces deberías haberlo hechofield.get(object)
.Como parece estar buscando el valor del campo, puede obtenerlo como:
No es necesario instanciar el tipo de campo y crear algún valor vacío / predeterminado; o tal vez hay algo que me perdí.
fuente
object
no está definido, los lectores no pueden entender cómo aplicar la respuesta.fuente
Estás llamando a get con el argumento equivocado.
Debería ser:
fuente
object
no está definido, los lectores no pueden entender cómo aplicar el ejemplo en la respuestaPublico mi solución en Kotlin, pero también puede funcionar con objetos Java. Creo una extensión de función para que cualquier objeto pueda usar esta función.
Eche un vistazo a esta página web: https://www.geeksforgeeks.org/field-get-method-in-java-with-examples/
fuente
fuente