Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Recuperar tipo paramétrico

Buenas.

Estoy creando una clase (con su interfaz) que recibe un paramétro genérico (T). La cosa es que la clase debe instanciar un objeto del tipo indicado, pero no se como recuperar la clase concreta.

Es decir, tengo mi "IGenerica<T>" y mi "GenericaImpl<T>".

En código hago un:
IGenerica<MiClase> = new GenericaImpl<MiClase>();
Dentro de GenericaImpl debo recuperar la clase "MiClase" y hacer un "newInstance".

¿Sabeis como podría recuperarlo?.

Un saludo.

noviembre 23, 2011 | Unregistered CommenterMayantigo

Si sabes qué tipos de objetos vas a recibir, puedes hacer:


if(miClase instanceof String){
objeto = new String();
}else if(miClase instanceof List){
objeto = new ArrayList();
}else if(miClase instanceof Map){
objeto = new HashMap();
}

Otra sería obtener el objeto Class del parámetro con el método getClass() y de ahí saber de qué tipo es con getName() y getSimpleName().

noviembre 23, 2011 | Registered CommenterUnai Valle

Buenas.

En principio la clase puede ser cualquiera, no hay limitación. Ese es el problema...
El servicio está pensado para poder recibir cualquier tipo de clase.

Un saludo.

noviembre 23, 2011 | Unregistered CommenterMayantigo

Busca en google sobre reflexión:

- Reflexión en Java

¿Te puede llegar cualquier objeto? Por que como no tengas por lo menos una interfaz para saber qué métodos/atributos tiene, te puede resultar complicado usar la instancia...

noviembre 23, 2011 | Registered CommenterUnai Valle

Verás, el servicio lo que hace es recibir un objeto que contiene ciertas anotaciones. Mediante reflexión va comprobando los atributos de ese objeto que tienen la anotación, recupera su método get, lo ejecuta, y trata el resultado. Todo se hace mediante reflexión.

A partir de los datos procesados, debe generar una nueva instancia de ese objeto y devolverla.

Lo que he encontrado es pasarle en el constructor la clase directamente, para poder hacer un "newInstance". Pero quería hacerlo más "limpio" aún, y quitar ese parámetro del constructor.

El servicio no necesita saber la clase del objeto (solo para instanciarlo) pues todo funciona por reflexión y anotaciones (accede a sus atributos mediante "getters" y "setters". Vamos la implementación busca ser algo parecido a JPA, mediante anotaciones.

Un saludo.

noviembre 24, 2011 | Unregistered CommenterMayantigo