tipos tipo retorno manejo genericos generico generica datos con comparar comodin arreglos java class generics types parameterized

retorno - tipo comodin java



Obtener clase de genérico (5)

Lo hacemos de la siguiente manera:

private Class<T> persistentClass; public Class<T> getPersistentClass() { if (persistentClass == null) { this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } return persistentClass; }

Mi clase comienza con

public abstract class LastActionHero<H extends Hero>(){

Ahora, en alguna parte del código, quiero escribir H.class pero eso no es posible (como String.class o Integer.class is).

¿Puede decirme cómo puedo obtener la Class del genérico?


No puede: el tipo se borra en tiempo de ejecución y existe solo en tiempo de compilación.


Puede proporcionar el tipo de forma dinámica, sin embargo, el compilador no hace esto por usted automágicamente.

public abstract class LastActionHero<H extends Hero>(){ protected final Class<H> hClass; protected LastActionHero(Class<H> hClass) { this.hClass = hClass; } // use hClass how you like. }

Por cierto: no es imposible obtener esto de forma dinámica, pero depende de cómo se usa. p.ej

public class Arnie extends LastActionHero<MuscleHero> { }

Es posible determinar que Arnie.class tiene una súper clase con un parámetro genérico de MuscleHero.

public class Arnie<H extend Hero> extends LastActionHero<H> { }

El parámetro genérico de la superclase será solo H en este caso.



Una forma es mantener la referencia a su tipo parametrizado como tener un atributo de

private Class<H> clazz;

Y crea un setter o un constructor que tome una Class<H> .

Los tipos parametrizados se borran en el tiempo de ejecución, por lo que no puede hacer lo que pide.