Eu uso o seguinte código para converter uma matriz de objetos em uma matriz de seqüência de caracteres:
Object Object_Array[]=new Object[100];
// ... get values in the Object_Array
String String_Array[]=new String[Object_Array.length];
for (int i=0;i<String_Array.length;i++) String_Array[i]=Object_Array[i].toString();
Mas eu me pergunto se existe outra maneira de fazer isso, algo como:
String_Array=(String[])Object_Array;
Mas isso causaria um erro de tempo de execução: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
Qual é a maneira correta de fazer isso?
Respostas:
Outra alternativa para
System.arraycopy
:fonte
No Java 8:
Para converter uma matriz de outros tipos:
fonte
System.arraycopy é provavelmente a maneira mais eficiente, mas para a estética, eu prefiro:
fonte
copyof
. Você está se referindo a outra resposta?Vejo que algumas soluções foram fornecidas, mas nenhuma causa, por isso explicarei isso em detalhes, pois acredito que é tão importante saber o que você estava fazendo de errado que apenas obter "algo" que funcione a partir das respostas fornecidas.
Primeiro, vamos ver o que a Oracle tem a dizer
Pode não parecer importante, mas como você verá, é ... Então, o que a linha a seguir falha? Todos os objetos da lista são String, mas não os convertem, por quê?
Provavelmente, muitos de vocês pensariam que esse código está fazendo o mesmo, mas não o faz.
Quando, na realidade, o código escrito está fazendo algo assim. O javadoc está dizendo isso! Instará uma nova matriz, o que será dos objetos !!!
Então tList.toArray está instanciando um Objetos e não Strings ...
Portanto, a solução natural que não foi mencionada neste segmento, mas é o que a Oracle recomenda é a seguinte
Espero que esteja claro o suficiente.
fonte
(String)Object_Array[i]
ouObject_Array[i].toString()
ou alocar a matriz como uma matriz StringObject Object_Array[]=new String[100];
... obter valores ... então lançarString_Array=(String[])Object_Array
que agora funciona.A estrutura de coleções do google oferece a citação um bom método de transformação, para que você possa transformar seus Objetos em Strings. A única desvantagem é que deve ser de Iterable para Iterable, mas é assim que eu faria:
Isso o impede de usar matrizes, mas acho que essa seria a minha maneira preferida.
fonte
Se você deseja obter uma representação String dos objetos em sua matriz, sim, não há outra maneira de fazê-lo.
Se você sabe que sua matriz de objetos contém apenas Strings, você também pode fazer isso (em vez de chamar toString ()):
O único caso em que você poderia usar o cast para String [] do Object_Array seria se a matriz que ele referencia fosse realmente definida como String [], por exemplo, isso funcionaria:
fonte
Este é legal, mas não funciona como os mmyers notaram, por causa dos colchetes:
Arrays.toString(objectArray).split(",")
Este é feio, mas funciona:
Arrays.toString(objectArray).replaceFirst("^\\[", "").replaceFirst("\\]$", "").split(",")
Se você usar esse código, verifique se as seqüências retornadas por toString () dos objetos não contêm vírgulas.
fonte
Para sua ideia, na verdade você está se aproximando do sucesso, mas se você fizer isso, tudo bem:
BTW, o uso do método utilitário Arrays é muito bom e torna o código elegante.
fonte
fonte
Você pode usar o conversor de tipos . Para converter uma matriz de qualquer tipo em matriz de cadeias, você pode registrar seu próprio conversor:
e use
fonte
Altere facilmente sem qualquer cabeçalho Converta qualquer matriz de objetos em matriz de objetos Object drivex [] = {1,2};
fonte