Arrays + Generics

2 respostas
Marky.Vasconcelos

Olá.

Existe um modo de criar uma array de um objeto com generics ?

Algo assim:

class Classe<T> {
public Classe(Class<T> class,String name){
}
}

class Teste{
public static void main(String...args){
Classe<String>[] classes = {new Classe<String>(String.class,"String"),new Classe<String>(String.class,"String") };//Quero usar o {} para declarar os itens do array assim que crialo

//Sei que posso fazer isso
Classe<String>[] classes  = new Classe<String>[2];
classes[0] = new Classe<String>(String.class,"String");
classes[1] = new Classe<String>(String.class,"String");
}
}

O segundo modo funciona, mas gostaria de saber se existe um modo que seja o mais proximo possivel da minha primeira expressão.

Meu exemplo real é utilizar algo assim:

no construtor da classe que quero.

public class SelectTable2<T> //...
public SelectTable2(FieldResolver<T>[] cols,List<T> list,ObjectSelectListener listener){
//..

//Construtor da classe FieldResolver

public class FieldResolver<T>
public FieldResolver(Class<T> clazz, String field, String name){
//..

//Eu quis usar o Generics para evitar um descuido como esse
new SelectTable2(new FieldResolver[]{new FieldResolver(String.class,"",""),new FieldResolver(Double.class,"","")},new ArrayList<Integer>(),null);

//Mas com o Generics eu gostaria de usar a mesma estrutura no construtor
new SelectTable2<Pessoa>(new FieldResolver<Pessoa>[]{new FieldResolver<Pessoa>(Pessoa.class,"nome","Nome"),new FieldResolver<Pessoa>(Pessoa.class,"idade","Idade")},new ArrayList<Pessoa>(),null);

//Com o generics ele não deixa eu colocar nada diferente do que foi colocado na classe SelectTable2.
//O unico erro é isso: new FieldResolver<Pessoa>[]{new FieldResolver<Pessoa>(Pessoa.class,"nome","Nome"),new FieldResolver<Pessoa>(Pessoa.class,"idade","Idade")}

2 Respostas

Lucas_Cavalcanti

Tenta algo assim:

Classe<String>[] classes = new Classe<String>[] {
   new Classe<String>(...), new Classe<String>(...), ...
}

claro que sem os … =)

Marky.Vasconcelos

O Eclipse reclama isso:

Cannot create a generic array of FieldResolver<Empresa>
Criado 19 de março de 2008
Ultima resposta 19 de mar. de 2008
Respostas 2
Participantes 2