Tipo Genericos duvida

2 respostas
R

Boa tarde preciso de ajuda ainda nao entendi como fazer array de tipos genericos

public T[] toArray(){
		T[] result = (T[]) Array.newInstance(Comparable.class, size()); // Aqui o Problema achei na internet que poderia ser assim... mais nao sei direito o que estou fazendo
		int posicao = 0;
		toArray(result,this,posicao);
		return result;
	}

	private void toArray(T[] array,
			RecursiveSingleLinkedList<T> node,int posicao) {
			if(!node.isEmpty()){
				array[posicao] = node.data;
				toArray(array,node.next,posicao+1);
			}
	}

Exception in thread “main” java.lang.ClassCastException: [Ljava.lang.Comparable; cannot be cast to [Ljava.lang.Integer;
at

a.toArray()[0]

Comparable nao pode da cast para interger entendi mais nao vejo outra forma de criar esse array

2 Respostas

sergiotaborda

Em java , por causa do erasure, não tem como criar arrays genéricos. Vc precisa da classe do array. Vc precisa saber explicitamente qual é a classe de T.

O Array.newInstance cria o array para vc , mas o primeiro argumento é a classe to array. Isso vc precisa ter e não pode usar qualquer classe. No seu exemplo vc está usando Comparable, mas isso não é suficiente porque vc está jogando isso num array de Integer e ai dá erro.

Uma opção é não usar arrays. No seu exemplo não fica claro para precisa desse codigo. Use List, ou Collections.unmodifiableList que é mais rápido e mais OO.
Mas se quer mesmo criar o array, vc precisa informar a classe.

R

sergiotaborda:
Em java , por causa do erasure, não tem como criar arrays genéricos. Vc precisa da classe do array. Vc precisa saber explicitamente qual é a classe de T.

O Array.newInstance cria o array para vc , mas o primeiro argumento é a classe to array. Isso vc precisa ter e não pode usar qualquer classe. No seu exemplo vc está usando Comparable, mas isso não é suficiente porque vc está jogando isso num array de Integer e ai dá erro.

Uma opção é não usar arrays. No seu exemplo não fica claro para precisa desse codigo. Use List, ou Collections.unmodifiableList que é mais rápido e mais OO.
Mas se quer mesmo criar o array, vc precisa informar a classe.

Obrigado pelo esclarecimento

Criado 20 de fevereiro de 2013
Ultima resposta 20 de fev. de 2013
Respostas 2
Participantes 2