Container<T extends ClasseA> {
Protected T meuTipo = null;
Container(int i) {
meuTipo = ????.newInstance() ??????
meuTipo.setIndex(i);
}
}
Alguma dica???
Já tentei fazer via reflection com:
public abstract class AbstractCSASN1Tagged<T> {
protected T typeT = null;
public AbstractCSASN1Tagged() throws InstantiationException, IllegalAccessException {
typeT = (T) ((Class)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0]).newInstance();
}
}
public class MyTagged<T> extends AbstractCSASN1Tagged<T> {
public MyTagged() throws InstantiationException, IllegalAccessException {
super();
}
}
Mas dá exception:
Cast exception:
The TypeVariableImpl cannot be cast to Java.lang.Class
Duvida como criar uma instância de uma classe genérica?
P
2 Respostas
Experimenta assim:
typeT = (((Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0])).newInstance();
P
É não deu certo. O problema não era o cast para T, nem para Class.
O problema é que no getTypeArguments()[0], mesmo fazendo outras maracutaias para achar o tipo do pai, ou mesmo do filho T, o Type retornado é ?T? sem o tipo passado na referência da classe, exemplo String. Assim, não é possível o cast para newInstance() e dá pau.
Tá foda! Vou tentar fazer de outra forma. Se descobrir outro truque, me avisa.
Criado 3 de junho de 2009
Ultima resposta 3 de jun. de 2009
Respostas 2
Participantes 2
Alura POO: o que é programação orientada a objetos? Aprenda os conceitos básicos da programação orientada a objetos, como classes, objetos, herança, encapsulamento e polimorfismo, com exemplos.
Casa do Codigo Inteligencia Artificial e ChatGPT: Da revolucao dos... Por Fabricio Carraro — Casa do Codigo