Utilizo el siguiente código para convertir una matriz de objetos en una matriz de cadenas:
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();
Pero me pregunto si hay otra forma de hacer esto, algo como:
String_Array=(String[])Object_Array;
Pero esto causaría un error de tiempo de ejecución: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
¿Cuál es la forma correcta de hacerlo?
Respuestas:
Otra alternativa a
System.arraycopy
:fuente
En Java 8:
Para convertir una matriz de otros tipos:
fuente
System.arraycopy es probablemente la forma más eficiente, pero por estética, prefiero:
fuente
copyof
. ¿Te refieres a otra respuesta?Veo que se han proporcionado algunas soluciones pero no ninguna causa, por lo que explicaré esto en detalle, ya que creo que es tan importante saber qué estaba haciendo mal que obtener "algo" que funcione a partir de las respuestas dadas.
Primero, veamos qué tiene que decir Oracle
Puede que no parezca importante, pero como verá, es ... Entonces, ¿qué falla la siguiente línea? Todos los objetos en la lista son String pero no los convierte, ¿por qué?
Probablemente, muchos de ustedes pensarían que este código está haciendo lo mismo, pero no es así.
Cuando en realidad el código escrito está haciendo algo como esto. ¡El javadoc lo está diciendo! Instantará una nueva matriz, lo que será de Objetos !!!
Entonces tList.toArray está instanciando objetos y no cadenas ...
Por lo tanto, la solución natural que no se ha mencionado en este hilo, pero es lo que recomienda Oracle es la siguiente
Espero que sea lo suficientemente claro.
fuente
(String)Object_Array[i]
oObject_Array[i].toString()
o asignar la matriz como una matriz de cadenasObject Object_Array[]=new String[100];
... obtener valores ... entonces fundidoString_Array=(String[])Object_Array
que ahora trabaja.El marco de colecciones de Google ofrece un buen método de transformación para que pueda transformar sus objetos en cadenas. El único inconveniente es que tiene que ser de Iterable a Iterable, pero esta es la forma en que lo haría:
Esto te aleja del uso de matrices, pero creo que esta sería mi forma preferida.
fuente
Si desea obtener una representación de cadena de los objetos en su matriz, entonces sí, no hay otra forma de hacerlo.
Si sabe que su matriz de Objetos contiene solo Cadenas, también puede hacerlo (instread de llamar a ToString ()):
El único caso en el que podría usar la conversión a String [] de Object_Array sería si la matriz a la que hace referencia en realidad se definiría como String [], por ejemplo, esto funcionaría:
fuente
Este es bueno, pero no funciona como notaron mmyers, debido a los corchetes:
Arrays.toString(objectArray).split(",")
Este es feo pero funciona:
Arrays.toString(objectArray).replaceFirst("^\\[", "").replaceFirst("\\]$", "").split(",")
Si usa este código, debe asegurarse de que las cadenas devueltas por sus objetos 'toString () no contengan comas.
fuente
Para tu idea, en realidad te estás acercando al éxito, pero si te gusta esto debería estar bien:
Por cierto, usar el método de utilidad Arrays es bastante bueno y hace que el código sea elegante.
fuente
fuente
Puedes usar type-converter . Para convertir una matriz de cualquier tipo en una matriz de cadenas, puede registrar su propio convertidor:
y úsalo
fuente
Cambie fácilmente sin ningún encabezado Convierta cualquier matriz de objetos en una matriz de cadenas Object drivex [] = {1,2};
fuente