Reflexão - Como pegar o tipo <T> de um argumento

6 respostas
Lavieri

Como pegar o tipo T de um argumento por reflexão ??

por exemplo

private &lt;T&gt; void addDao(Dao&lt;T&gt; dao) { //como por reflexão pegar a classe T do dão enviado ? }

6 Respostas

Giulliano

eu faria

public class MinhaClasse&lt;T&gt;
private T bean;

private &lt;T&gt; void addDao(Dao&lt;T&gt; dao) {
//onde bean é o tipo.
}
Paulo_Silveira

e a resposta é … não da! :frowning:

http://blog.caelum.com.br/2007/04/08/generics-inferencia-de-tipos-e-reificacao-no-java-7/
http://blog.caelum.com.br/2006/10/29/brincando-com-generics-o-bizarregenericdao/

G

Paulo Silveira:
e a resposta é … não da! :frowning:

http://blog.caelum.com.br/2007/04/08/generics-inferencia-de-tipos-e-reificacao-no-java-7/
http://blog.caelum.com.br/2006/10/29/brincando-com-generics-o-bizarregenericdao/

BizarreGenericDAO… perfeito, hahaha. Não consigo pensar em outro nome, hehe. Completamente POG, mas como você mesmo disse, um excelente desafio.

Mas até quando será que vão manter essa retrocompatibilidade? Será mesmo que vale a pena sacrificar funcionalidades em prol de retrocompatibilidade com versões pré java 5 quando já estivermos no Java 8?

Lavieri

Paulo Silveira:
e a resposta é … não da! :frowning:

http://blog.caelum.com.br/2007/04/08/generics-inferencia-de-tipos-e-reificacao-no-java-7/
http://blog.caelum.com.br/2006/10/29/brincando-com-generics-o-bizarregenericdao/

da sim! =P … é tipado com extensão =P … Dao é uma interface… já vi como fazer,

ProdutoDao impelments Dao { …

e esse Produto da pra resgatar…

algo como

getClass().getGenericSuperclass() (ou Interfaces)

e de la extrai

jgbt

Se me lembro bem da p/ pegar sim.
Acho que tenho um exemplo em casa sobre isso, vou dar uma procurada e posto aqui.
Ma é mais ou menos como o colega postou.

[]´s

sergiotaborda

Lavieri:
Como pegar o tipo T de um argumento por reflexão ??

por exemplo

private &lt;T&gt; void addDao(Dao&lt;T&gt; dao) { //como por reflexão pegar a classe T do dão enviado ? }

não use reflection para o que vc pode fazer sozinho:

public class DAOBag&lt;T&gt; {

  public static DAOBag &lt;X&gt; newInstance(Class&lt;X&gt; type){
        return new DAOBag &lt;X&gt;(type);
  }
 
   private DAOBag(Class&lt;X&gt; type){
     this.type = type;
  }

   public void addDao(Dao&lt;? extends T&gt; dao) {
//		 dao do tipo certo serão aceites e o tipo está no atributo type
   }

uso

DAOBag&lt;Pessoa&gt; daosDePessoa = DAOBag.newInstance(Pessoa.class);

Não sei para serviria um objeto destes , mas ai está…

Criado 23 de outubro de 2009
Ultima resposta 23 de out. de 2009
Respostas 6
Participantes 6