Não é possível instanciar tipos genéricos via reflexão porque eles simplesmente não existem em tempo de execução (nem em tempo de compilação, mas isso já é outra história…).
Você pode fazer simplesmente assim (deve dar um warning, mas nada que mate):
Na verdade HashMap<String, Object> e HashMap<Abobra, Abacaxi> é a mesma coisa pro java em tempo de execucao. Ela nao consegue distinguir. No fundo, generics do java é um truque de compilacao, a nao ser pela pequena parte de reflexao que da para fazer nos atributos e classes.
Só uma pergunta, se você sabe que quer um HashMap e, mais, quer um de <String,String> porque precisa fazer com reflection? Não pode fazer o bom e velho new HashMap<String,String>()?
saoj
Porque o DAO do cara usa generics e ele quer injetar via IoC.
E IoC instancia via reflection, pois dependendo do escopo ele vai inicar isso uma ou muitas vezes.
Valeu pela ajuda pessoal! Vou ler lá o blog do Paulo…
Paulo_Silveira
entao simplesmente esqueca do generics, ele nao vai incomodar! Considere usar o picocontainer, ele ja faz essas coisas sozinho, excelente pra suar dentro de outro framework.
marcelo_bazan
Só uma dica …
se vc jah sabe que o HashMap precisa ser <String, String>, pq nao utilizar um objeto do tipo Properties via reflection do jeito que vc precisa ? Nao iria resolver o seu problema ?
Paulo_Silveira
marcelo_bazan:
Só uma dica …
se vc jah sabe que o HashMap precisa ser <String, String>, pq nao utilizar um objeto do tipo Properties via reflection do jeito que vc precisa ? Nao iria resolver o seu problema ?
Ele ainda nao sabe quais sao os tipos parametrizados. Foi so um exemplo. E properties eh mais fraca que HashMap<String,String>