Mi objetivo es desarrollar una clase que pueda generar un objeto de una clase especificada.Cómo pasar una clase parametrizada como argumento
public class GetMe<T> {
public T get() {
Object obj = generateObject();
return (T) obj;
}
}
Ahora, sé que esto no es posible debido a la eliminación. Entonces, podemos pasar una instancia de clase y usar eso para lanzar.
public class GetMe<T> {
public GetMe<T>(Class<T> clazz) {
this.clazz = clazz;
}
public T get() {
Object obj = generateObject();
return clazz.cast(obj);
}
}
Esto funciona genial! Siempre que la clase no esté parametrizada. Si es así, entonces tengo un problema.
No tengo permiso para usar List<String>.class
. Si paso en un ParameterizedType (que en sí mismo es difícil de generar), no hay un método cast
para usar.
¿Hay alguna manera de salir de este atolladero?
Hay una manera de retener genéricos en tiempo de ejecución, pero ¿qué es 'generateObject' y por qué no puede devolver un objeto de tipo' T'? – ide
vea estos ejemplos, podría ayudar: http://serdom.eu/ser/2007/03/25/java-generics-instantiating-objects-of-type-parameter-without-using-class-literal –
Digamos ' generateObject() 'es un deserializador de terceros. Sé que es de tipo T, porque lo serialé antes, pero el método solo devuelve Object. También podría ser el resultado de un método.invoque, que solo devuelve Object. –