Então cara… eu não queria te dar uma má noticia… mas num dá pra fazer do jeito que você quer…
ramilani12
prq vc nao usa instanceof?
ViniGodoy
Esse monte de if…
Não daria para usar polimorfismo e substituir por um enum, implementando o Pattern Strategy?
velo
ViniGodoy:
Esse monte de if…
Não daria para usar polimorfismo e substituir por um enum, implementando o Pattern Strategy?
Dar, dah… mas daih ele tem q passar como parametro no metodo neh?!
Se fosse pra fazer assim eu passava o class, hehehe
VELO
Paulo_Silveira
nao tem como fazer velo.
velo
E se eu ler a linha anterior do stack?!
Toh pensando em fazer isso…
VELO
T
thingol
O que o tutorial de Generics vai lhe dizer é que você tem de fazer algo semelhante a:
importjava.util.*;classTesteGenerics{private<E>EgetValue(Class<E>klass){try{returnklass.newInstance();}catch(Exceptionex){// ok, é uma outra exceção que newInstance lança, mas tenho de ver na documentaçãoreturnnull;}}@SuppressWarnings("unchecked")publicstaticvoidmain(String[]args){TesteGenericstg=newTesteGenerics();Strings=tg.getValue(String.class);List<String>ls=(List<String>)tg.getValue(ArrayList.class);// isto gera um warningNumbern=tg.getValue(Double.class);Integeri=tg.getValue(Integer.class);System.out.printf("[%s] [%s] [%d] [%d] %n",s,ls.toString(),n,i);}}
velo
Eh, eu tava pensando nisso tbm, e nem precisava do newInstance…
Me diz uma coisa… não tem como eu ler o stack do q tah rolando no java, pegar a linha que tá chamando o getValue e fazer isso?
VELO
T
thingol
É claro que tem (crie um new java.lang.Throwable(), e use o método getStackTrace()), mas isso é realmente nojento - você precisaria:
Obter o número da linha e o nome da classe (isso é fácil);
Deixar o fonte disponível para você acessar em tempo de execução (argh);
Efetuar um “parse” nessa linha; (argh argh argh - você conhece teoria de compiladores?)
Você realmente quer fazer isso?
O sr. Gilad Bracha (um dos inventores e implementadores de Generics em Java) disse que não é para fazer isso que você quer fazer.
Ele disse no tutorial dele que, de preferência, se você realmente precisar disso, passar um objeto da classe java.lang.Class, tal como eu mostrei.
Eduardo_Bregaida
Nao tem como fazer isso Velo…
A
armando
Complementando… pelo que eu entendo, generics não é pra isso mesmo, não é pra fazer… afinal, você não está sendo “Generic”, certo? veja se não é o caso de trabalhar com interfaces, por exemplo…