Korzystam z następującego kodu, aby przekonwertować tablicę Object na tablicę 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();
Ale zastanawiam się, czy jest na to inny sposób, na przykład:
String_Array=(String[])Object_Array;
Spowodowałoby to jednak błąd wykonania: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
Jaki jest właściwy sposób to zrobić?
Odpowiedzi:
Inna alternatywa dla
System.arraycopy
:źródło
W Javie 8:
Aby przekonwertować tablicę innych typów:
źródło
System.arraycopy jest prawdopodobnie najbardziej wydajnym sposobem, ale dla estetyki wolałbym:
źródło
copyof
. Czy odnosisz się do innej odpowiedzi?Widzę, że niektóre rozwiązania zostały dostarczone, ale nie ma żadnych przyczyn, więc wyjaśnię to szczegółowo, ponieważ uważam, że równie ważne jest wiedzieć, co robiłeś źle, aby uzyskać „coś”, co działa na podstawie podanych odpowiedzi.
Najpierw zobaczmy, co ma do powiedzenia Oracle
To może nie wyglądać na ważne, ale jak zobaczysz, to jest ... Więc co zawiedzie następująca linia? Wszystkie obiekty na liście są ciągiem, ale nie konwertuje ich, dlaczego?
Prawdopodobnie wielu z was pomyśli, że ten kod robi to samo, ale tak nie jest.
Kiedy w rzeczywistości napisany kod robi coś takiego. Jawadok to mówi! Ustanowi nową tablicę, czym będzie Obiektów !!!
Zatem tList.toArray tworzy instancję Obiektów, a nie Ciągów ...
Dlatego naturalnym rozwiązaniem, o którym nie wspomniano w tym wątku, ale to, co zaleca Oracle, jest następujące
Mam nadzieję, że to dość jasne.
źródło
(String)Object_Array[i]
alboObject_Array[i].toString()
przydziel tablicę jako tablicę StringObject Object_Array[]=new String[100];
... pobierz wartości ..., a następnie rzut,String_Array=(String[])Object_Array
który teraz działa.Ramy kolekcji Google oferują ofertę dobrej metody transformacji, dzięki czemu można przekształcić obiekty w ciągi znaków. Jedynym minusem jest to, że musi to być od Iterable do Iterable, ale tak bym to zrobił:
Odciąga cię to od używania tablic, ale myślę, że to byłby mój preferowany sposób.
źródło
Jeśli chcesz uzyskać ciąg znaków reprezentujący obiekty w tablicy, to tak, nie ma innego sposobu, aby to zrobić.
Jeśli wiesz, że tablica obiektów zawiera tylko ciągi znaków, możesz także zrobić (instread wywołania metody toString ()):
Jedynym przypadkiem, w którym można użyć rzutowania na String [] obiektu Object_Array, jest sytuacja, w której tablica, do której się ona odwołuje, byłaby faktycznie zdefiniowana jako String [], np. Działałoby to:
źródło
Ten jest fajny, ale nie działa, jak zauważyli mmyers, ze względu na nawiasy kwadratowe:
Arrays.toString(objectArray).split(",")
Ten jest brzydki, ale działa:
Arrays.toString(objectArray).replaceFirst("^\\[", "").replaceFirst("\\]$", "").split(",")
Jeśli używasz tego kodu, musisz mieć pewność, że ciągi zwracane przez obiekt doString () nie zawierają przecinków.
źródło
Jeśli chodzi o twój pomysł, faktycznie zbliżasz się do sukcesu, ale jeśli tak, to powinno być w porządku:
BTW, użycie narzędzia Arrays jest całkiem dobre i sprawia, że kod jest elegancki.
źródło
źródło
Możesz użyć konwertera typów . Aby przekonwertować tablicę dowolnego typu na tablicę ciągów, możesz zarejestrować własny konwerter:
i użyj go
źródło
Łatwo zmieniaj bez nagłówka Konwertuj dowolną tablicę obiektów na tablicę ciągów Obiekt drivex [] = {1,2};
źródło