Retornar uma lista com o tipo do bean que eu passar para o método.
public<E>List<E>getList(Ebean){}
O único jeito que eu encontrei de fazer isso me dá um warning dizendo que não é o jeito certo de se fazer (Type safety: The cast from capture-of ? extends Object to E is actually checking against the
erased type Object)
E bean = (E) bean.getClass().newInstance();
Alguém sabe como fazer isso ou se é possível fazer isso de um mode diferente a esse que eu fiz aí ???
Não !!! O problema é que meu bean não serve apenas para determinar o tipo. Ele tem outras coisas importantes.
A questão então ficou simples:
É possível pegar a class E do meu bean para instanciar outro ou isso é impossível, ou seja, eu obrigatoriamente além do bean tenho que passar a classe dele.
Muito esquisito se isso for impossível…
T
thingol
Hum, agora entendi.
Vou preparar um exemplo aqui, para ver o que você precisa.
saoj
Um outro problema de ter que obrigatoriamente passar o bean e a classe é que o cara pode malandramente passar o bean e uma classe nada haver…
Daí vai dar pau… (nada muito grave, mas o melhor seria passar apenas o bean para evitar esse problema…)
mister_m
Não, não pode. Isso não compila.
saoj
mister__m:
saoj:
Um outro problema de ter que obrigatoriamente passar o bean e a classe é que o cara pode malandramente passar o bean e uma classe nada haver…
Não, não pode. Isso não compila.
Perdão! Tem razão… Ambos tem que ser E…
T
thingol
importjava.util.*;classBeanPadrao{}classMeuBeanextendsBeanPadrao{}classSeuBeanextendsMeuBean{}classOutroBeanextendsBeanPadrao{}/** * Para simplificar, estou desprezando o tratamento de exceptions */classBeanBean{// Primeira opção - warning: [unchecked] unchecked cast// found : capture#98 of ? extends java.lang.Object// required: Epublic<E>List<E>getList1a(Ebean)throwsException{List<E>ret=newArrayList<E>();EnewBean=(E)bean.getClass().newInstance();ret.add(newBean);returnret;}// Note que isto não faz exatamente o que você quer,// mas não provoca warningspublic<E>List<E>getList1b(Ebean,Class<E>klass)throwsException{List<E>ret=newArrayList<E>();EnewBean=klass.newInstance();ret.add(newBean);returnret;}// Será que é isso que você precisa?publicList<BeanPadrao>getList2(BeanPadraobean)throwsException{// Note que um ArrayList<BeanPadrao> pode conter, entre outras// coisas, MeuBean e SeuBean, assim como OutroBean.List<BeanPadrao>ret=newArrayList<BeanPadrao>();// Note que aqui iremos criar um "newBean" cuja classe é // "MeuBean" se bean.getClass() == MeuBean.class, por exemplo.BeanPadraonewBean=bean.getClass().newInstance();ret.add(newBean);returnret;}publicstaticvoidmain(String[]args)throwsException{BeanBeanbb=newBeanBean();MeuBeanb1=newSeuBean();BeanPadraob4=newOutroBean();List<MeuBean>lsb1a=bb.getList1a(b1);List<MeuBean>lsb1b=bb.getList1b(b1,MeuBean.class);List<?extendsBeanPadrao>lsb2=bb.getList2(b1);List<BeanPadrao>lsb4=bb.getList2(b4);}}
saoj
A terceira opção seria como vc assumir que BeanPadrao é o Object, mas aí vc teria que dar cast nos elementos da sua Lista para o bean em questão.