Duvida como criar uma instância de uma classe genérica?

2 respostas
P
Container<T extends ClasseA> {

                Protected T meuTipo = null;

 

                Container(int i) {

                               meuTipo = ????.newInstance() ??????

                               meuTipo.setIndex(i);

                }

}

 

Alguma dica???

 

 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  exception:

 

Cast exception:

 

The TypeVariableImpl cannot be cast to Java.lang.Class

2 Respostas

pmlm

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