Como posso fazer um cast de um List para um Array[]?

7 respostas
d10g3n35

Olá pessoal. Sou iniciante em java e esse é o meu primeiro post.

Tenho uma classe que implementa uma interface chamada Ordenavel(Tenho que fazer com ela), que possui os métodos add(), remove() e list().
Esse último método, o list(), tem um retorno que é: Comparable[] e nos métodos add() e remove() eu uso um List. Tenho uma classe Pessoa que implementa a Interface Comparable.

O caso é como uso um List e preciso mandar um retorno de objetos do tipo Comparable[] e ocorre um erro quando tento converter o List nesse tipo.

Olhem essa classe por favor.
Desde já obrigado!

public class MinhaListaOrdenada implements Ordenavel {

    private List<Comparable> lista;

    public MinhaListaOrdenada() {
        lista = new ArrayList<Comparable>();
    }

    public void add(Comparable obj) {
        lista.add(obj);
        Collections.sort(lista);
    }

    public void remove(Comparable obj) {
        lista.remove(obj);
    }

    public Comparable[] list() {        
        return (Comparable[])lista.toArray();
    }
}

7 Respostas

pmlm

http://java.sun.com/javase/6/docs/api/java/util/List.html#toArray(T[])

return lista.toArray(new Comparable[]{});
cdorner

Vc conhece a implementação TreeSet, ela garante que os elementos estarão ordenados e nao serão repetidos
http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeSet.html

d10g3n35

pmlm valeu deu certo. cdorner obrigado pela dica tb.
Agora sabem me dizer porque o que eu fiz dava erro?

filipenf

O método toArray que o pmlm sugeriu é diferente do que você está usando, veja que ele recebe um parâmetro. Eu aconselharia a usar o seguinte:

Comparable[] a = new Comparable[lista.size()];
lista.toArray(a);
return a;

É muito semelhante ao que o pmlm sugeriu, porém você passa o array e o método vai popular ele.

d10g3n35

Obrigado a todos!!! Ta funcionando. Queria entender o porque do que eu fiz num dá certo. Alguem sabe me explicar porque não posso fazer:

d10g3n35

filipenf no seu método vc instancia um array com o mesmo tamanho do ArrayList e o toArray o preenche, certo?

Mas e o do pmlm? Ele tb passa um Array. Mas qual a diferença? Pode me explicar?

filipenf

return lista.toArray(new Comparable[lista.size()]);

pmlm

return lista.toArray(new Comparable[]{});
filipenf

Porque o toArray que não recebe nada por parâmetro retorna um array de Object, enquanto que aquele que recebe o parâmetro retorna o array do tipo enviado por parâmetro, no caso Comparable. Acho que o problema foi esse.

Criado 22 de junho de 2009
Ultima resposta 22 de jun. de 2009
Respostas 7
Participantes 4