Я использую следующий код для преобразования массива объектов в массив строк:
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;
Но это может вызвать ошибку во время выполнения: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
Какой правильный способ сделать это?
Ответы:
Еще одна альтернатива
System.arraycopy
:источник
В Java 8:
Чтобы преобразовать массив других типов:
источник
System.arraycopy, вероятно, является наиболее эффективным способом, но для эстетики я бы предпочел:
источник
copyof
. Вы ссылаетесь на другой ответ?Я вижу, что были предоставлены некоторые решения, но не какие-либо причины, поэтому я объясню это подробно, так как считаю, что так же важно знать, что вы делали неправильно, просто чтобы получить «что-то», которое работает из данных ответов.
Сначала посмотрим, что скажет Oracle
Это может выглядеть неважно, но, как вы увидите, это так ... Так что же не получается в следующей строке? Все объекты в списке являются String, но он не конвертирует их, почему?
Возможно, многие из вас подумают, что этот код делает то же самое, но это не так.
Когда на самом деле написанный код делает что-то вроде этого. Javadoc говорит это! Он установит новый массив, каким он будет из объектов !!!
Таким образом, tList.toArray создает экземпляры объектов, а не строк ...
Поэтому естественное решение, которое не упоминалось в этой теме, но это то, что Oracle рекомендует, заключается в следующем
Надеюсь, это достаточно ясно.
источник
(String)Object_Array[i]
илиObject_Array[i].toString()
или выделить массив как массив строкObject Object_Array[]=new String[100];
... получить значение ... затем отливалаString_Array=(String[])Object_Array
который теперь работает.Каркас коллекций google предлагает хороший метод преобразования, чтобы вы могли преобразовать свои объекты в строки. Единственным недостатком является то, что он должен быть из Iterable в Iterable, но я бы так и сделал:
Это избавит вас от использования массивов, но я думаю, что это будет моим предпочтительным способом.
источник
Если вы хотите получить строковое представление объектов в вашем массиве, то да, другого способа сделать это нет.
Если вы знаете, что ваш массив Object содержит только строки, вы также можете сделать это (instread для вызова toString ()):
Единственный случай, когда вы могли бы использовать приведение к String [] объекта Object_Array, было бы, если бы массив, на который он ссылается, фактически был бы определен как String [], например, это будет работать:
источник
Это хорошо, но не работает, как заметил mmyers, из-за квадратных скобок:
Arrays.toString(objectArray).split(",")
Этот уродлив, но работает:
Arrays.toString(objectArray).replaceFirst("^\\[", "").replaceFirst("\\]$", "").split(",")
Если вы используете этот код, вы должны быть уверены, что строки, возвращаемые toString () ваших объектов, не содержат запятых.
источник
Для вашей идеи, на самом деле вы приближаетесь к успеху, но если вам это нравится, то все будет в порядке:
Кстати, использование вспомогательного метода Arrays довольно хорошо и делает код элегантным.
источник
источник
Вы можете использовать тип-конвертер . Для преобразования массива любых типов в массив строк вы можете зарегистрировать свой собственный конвертер:
и использовать это
источник
Легко изменить без головной боли. Конвертировать любой массив объектов в строковый массив. Объект drivex [] = {1,2};
источник