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

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 ? }

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.
}

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/

[quote=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/[/quote]

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?

[quote=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/[/quote]

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

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

[quote=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 ? }[/quote]

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) {
//		só 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á…