Conversão de ArrayList para array comum

3 respostas
striker07

Olá pessoal. Estou tendo um problema grande em uma coisa que, teoricamente, deveria ser trivial. Eu tenho um ArrayList com alguns elementos e preciso transformá-lo em um array simples. A princípio, tentei utilizar o próprio método toArray().

Primeiro tentei
MinhaClasse[] array = (MinhaClasse[]) arrayList.toArray()
mas me retornou a seguinte exception:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LMinhaClasse
Depois, tentei o outro método:
MinhaClasse[] array = arrayList.toArray(new MinhaClasse[arrayList.size()]);
mas me retornou isso:
java.lang.IllegalArgumentException: Structure array elements must use contiguous memory (bad backing address at Structure array index 1)
depois tentei utilizando um for, passar elemento por elemento.
MinhaClasse[] array = new MinhaClasse[arrayList.size()];

for (int i = 0; i < arrayList.size(); i++) {	
    array[i].nome = arrayList.get(i).nome;
    array[i].template1 = arrayList.get(i).template1;
    array[i].template2 = arrayList.get(i).template2;
}
Mas aí ele me joga um NullPointerException... Se eu dou um new antes de utilizar cada posição do array, ele acusa novamente essa segunda exceção que eu citei.

Alguém pode me dar uma luz?

3 Respostas

G

Cara, o segundo jeito que tu usou era pra funcionar,

testei aqui e rolou:

List<ErroEH> arrayList = new ArrayList<ErroEH>();
		
ErroEH erro = new ErroEH();
erro.id_erro = 1;
arrayList.add(erro);		

// assim		
ErroEH[] array = arrayList.toArray(new ErroEH[0]);
// ou assim
ErroEH[] array = arrayList.toArray(new ErroEH[arrayList.size()]);

Como tu tá criando essa sua classe “MinhaClasse”?

striker07

Um carinha em outro fórum me disse que o problema pode ser JNA envolvido no meio. A definição da classe é essa:

public class Digital extends Structure {

    public static class MinhaClasse implements Structure.ByValue {
    }
    public int nome;
    public byte[] template1 = new byte[403];
    public byte[] template2 = new byte[400];
}
E

“Structure array elements must use contiguous memory” - isso é um erro acusado pelo JNA, é isso?

O jeito tradicional ce fazer as coisas seria realmente

MinhaClasse[] array = arrayList.toArray(new MinhaClasse[arrayList.size()]);

Pelo que imagino, houve algum outro problema.

Criado 13 de março de 2012
Ultima resposta 13 de mar. de 2012
Respostas 3
Participantes 3