我使用以下代码将Object数组转换为String数组:

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();

但我想知道是否有另一种方法来做到这一点,比如:

String_Array=(String[])Object_Array;

但是这会导致一个运行时错误:线程"AWT-EventQueue-0"中的异常不能强制转换为[Ljava.lang.String];

正确的做法是什么?


当前回答

如果您想获得数组中对象的String表示形式,那么是的,没有其他方法可以做到这一点。

如果你知道你的对象数组只包含字符串,你也可以这样做(而不是调用toString()):

for (int i=0;i<String_Array.length;i++) String_Array[i]= (String) Object_Array[i];

你可以使用Object_Array的String[]类型转换的唯一情况是,如果它引用的数组实际上被定义为String[],例如,这将工作:

    Object[] o = new String[10];
    String[] s = (String[]) o;

其他回答

在Java 8中:

String[] strings = Arrays.stream(objects).toArray(String[]::new);

转换其他类型的数组:

String[] strings = Arrays.stream(obj).map(Object::toString).
                   toArray(String[]::new);

如果您想获得数组中对象的String表示形式,那么是的,没有其他方法可以做到这一点。

如果你知道你的对象数组只包含字符串,你也可以这样做(而不是调用toString()):

for (int i=0;i<String_Array.length;i++) String_Array[i]= (String) Object_Array[i];

你可以使用Object_Array的String[]类型转换的唯一情况是,如果它引用的数组实际上被定义为String[],例如,这将工作:

    Object[] o = new String[10];
    String[] s = (String[]) o;

轻松改变,没有任何头痛 将任意对象数组转换为字符串数组 对象drivex[] = {1,2};

    for(int i=0; i<drive.length ; i++)
        {
            Str[i]= drivex[i].toString();
            System.out.println(Str[i]); 
        }

您可以使用类型转换器。 要将任何类型的数组转换为字符串数组,您可以注册自己的转换器:

 TypeConverter.registerConverter(Object[].class, String[].class, new Converter<Object[], String[]>() {

        @Override
        public String[] convert(Object[] source) {
            String[] strings = new String[source.length];
            for(int i = 0; i < source.length ; i++) {
                strings[i] = source[i].toString();
            }
            return strings;
        }
    });

并使用它

   Object[] objects = new Object[] {1, 23.43, true, "text", 'c'};
   String[] strings = TypeConverter.convert(objects, String[].class);

System.arraycopy的另一个替代方案:

String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);