Retornar uma lista com o tipo do bean que eu passar para o método.
public <E> List<E> getList(E bean) {
}
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.
[quote=mister__m][quote=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…
[/quote]
import java.util.*;
class BeanPadrao {
}
class MeuBean extends BeanPadrao {
}
class SeuBean extends MeuBean {
}
class OutroBean extends BeanPadrao {
}
/**
* Para simplificar, estou desprezando o tratamento de exceptions
*/
class BeanBean {
// Primeira opção - warning: [unchecked] unchecked cast
// found : capture#98 of ? extends java.lang.Object
// required: E
public <E> List<E> getList1a(E bean) throws Exception {
List<E> ret = new ArrayList<E>();
E newBean = (E) bean.getClass().newInstance();
ret.add (newBean);
return ret;
}
// Note que isto não faz exatamente o que você quer,
// mas não provoca warnings
public <E> List<E> getList1b(E bean, Class<E> klass) throws Exception {
List<E> ret = new ArrayList<E>();
E newBean = klass.newInstance();
ret.add (newBean);
return ret;
}
// Será que é isso que você precisa?
public List<BeanPadrao> getList2 (BeanPadrao bean) throws Exception {
// Note que um ArrayList<BeanPadrao> pode conter, entre outras
// coisas, MeuBean e SeuBean, assim como OutroBean.
List<BeanPadrao> ret = new ArrayList<BeanPadrao>();
// Note que aqui iremos criar um "newBean" cuja classe é
// "MeuBean" se bean.getClass() == MeuBean.class, por exemplo.
BeanPadrao newBean = bean.getClass().newInstance();
ret.add (newBean);
return ret;
}
public static void main(String[] args) throws Exception {
BeanBean bb = new BeanBean();
MeuBean b1 = new SeuBean();
BeanPadrao b4 = new OutroBean();
List<MeuBean> lsb1a = bb.getList1a (b1);
List<MeuBean> lsb1b = bb.getList1b (b1, MeuBean.class);
List<? extends BeanPadrao> lsb2 = bb.getList2 (b1);
List<BeanPadrao> lsb4 = bb.getList2 (b4);
}
}