Como pegar o tipo T de um argumento por reflexão ??
por exemplo
private <T> void addDao(Dao<T> dao) {
//como por reflexão pegar a classe T do dão enviado ?
}
Como pegar o tipo T de um argumento por reflexão ??
por exemplo
private <T> void addDao(Dao<T> dao) {
//como por reflexão pegar a classe T do dão enviado ?
}
eu faria
public class MinhaClasse<T>
private T bean;
private <T> void addDao(Dao<T> dao) {
//onde bean é o tipo.
}
e a resposta é … não da! 
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! 
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! 
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 <T> void addDao(Dao<T> 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<T> {
public static DAOBag <X> newInstance(Class<X> type){
return new DAOBag <X>(type);
}
private DAOBag(Class<X> type){
this.type = type;
}
public void addDao(Dao<? extends T> dao) {
// só dao do tipo certo serão aceites e o tipo está no atributo type
}
uso
DAOBag<Pessoa> daosDePessoa = DAOBag.newInstance(Pessoa.class);
Não sei para serviria um objeto destes , mas ai está…