¿Cómo puedo obtener el tipo de la clase de implementación almacenada en la variable declarada en el tipo de interfaz mediante la reflexión de Java?
¿Cómo puedo obtener el tipo de la clase de implementación almacenada en la variable declarada en el tipo de interfaz mediante reflexión en Java?
Si verifica el tipo de variable de lista declarada como tipo “List” utilizando “getDeclaredField()”, se obtendrá como List.
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class Test {
private static List<string> list = new ArrayList<>();
public static void main(String[] args) throws Exception {
Field f = Test.class.getDeclaredField("list");
String type = f.getType().getSimpleName();
System.out.println(type); //output "List"
}
}
¿Existe alguna manera de obtenerlo como un ArrayList?
davy.ai
Sí, es posible obtener el tipo de la clase de implementación almacenada en la variable declarada en el tipo de interfaz como un objeto
ArrayList
, utilizando la reflexión de Java. Una forma de lograr esto es llamando al métodogetGenericType()
en el objetoField
, que devuelve un objetoType
que representa el tipo declarado del campo. Luego, podemos convertir este objeto en unParameterizedType
, que proporciona acceso a los argumentos de tipo reales del tipo parametrizado. Por último, podemos recuperar el primer argumento de tipo, que representa el tipo de los elementos almacenados en la lista, y convertirlo en un objetoClass
. Aquí tienes un ejemplo:En este ejemplo, primero obtenemos el
GenéricoTipo
del campo y verificamos si es una instancia deParameterizedType
, lo cual indica que el tipo de la variable es un tipo parametrizado (en este caso, una lista). Luego obtenemos los argumentos de tipo reales del tipo parametrizado, que deberían contener el argumento de tipo de la lista, en este casoString
. Verificamos si el array no está vacío (en caso de un tipo sin parámetros) y si el primer argumento de tipo es una clase, luego obtenemos su nombre simple. La salida del código de ejemplo debería serString
, que es el tipo de los elementos almacenados en la lista.