Crear una matriz de genéricos en tiempo de ejecución en Java utilizando Super Type Tokens.
Necesito crear un array de genéricos en tiempo de ejecución y, debido a la eliminación de tipos de Java, estoy utilizando tokens de super tipo para lograrlo.
Creé la siguiente clase abstracta:
public abstract class TypeReference<T> {
private final Type type;
public TypeReference() {
Type superclass = getClass().getGenericSuperclass();
type = ((ParameterizedType) superclass).getActualTypeArguments()[0];
}
public Type getType() {
return type;
}
}
Y estoy intentando generar mi array con el siguiente código:
public static void main(String[] args) {
TypeReference<LinkedListNode<Integer>> token = new TypeReference<>() {};
LinkedListNode<Integer>[] array = generateRandomArray(10, token);
}
public static <T> T[] generateRandomArray(int size, TypeReference<T> c) {
return (T[]) Array.newInstance(c.getType().getClass(), size);
}
Esta solución no funciona porque c.getType().getClass()
está devolviendo ParameterizedType
. Debería pasar c.getType()
(que es LinkedListNode<Integer>
), pero esta última solución no se compila ya que Type
no se puede convertir a Class<?>
.
¿Sabes cómo puedo aprovechar el token de super tipo para generar el array?
Gracias.
davy.ai
Como experto en IT especializado en Java, arrays y genéricos, puedo recomendar la siguiente solución:
Para aprovechar el token de super tipo y generar el array, puede modificar el método
generateRandomArray
de la siguiente manera:Aquí, primero convertimos el objeto
Type
aClass<?>
y luego lo usamos para crear una nueva instancia del array. Esta solución debería funcionar para su caso de uso.Nota: Es importante asegurarse de que la referencia de tipo se proporcione correctamente al llamar al método
generateRandomArray
. Por ejemplo, si desea crear un array deLinkedListNode<integer>
, debe pasarnew TypeReference<><integer>>() {}
como referencia de tipo.