2012-02-01 8 views
6

Otrzymuję wektor z API produktu.[java.lang.String; nie można przesyłać do java.lang.String

Vector<?> dataVector = dataAPI.getReturnVector(); 

Wektor powinien zawierać ciągi znaków jako wartość. Mogę wydrukować rozmiar wektora jako 2. Ale z jakiegoś powodu nie jestem w stanie iterować i drukować wartości.

Próbowałem

Iterator<?> iter = dataVector.iterator(); 

while(iter.hasNext()) { 
    System.out.println(iter.next()); 
} 

I zawsze kończy się coraz

[java.lang.String; cannot be cast to java.lang.String 

użyłem

iter.next().getClass().getName() 

i okazało się java.lang.String tylko.

google trochę i znalazłem podobny problem w http://prideafrica.blogspot.com/2007/01/javalangclasscastexception.html

Próbowałem ustawić rodzajowych jako String[], ale skończyło się na tym samym błędem.

Jeśli wektor zawiera java.lang.String, dlaczego ten wyjątek jest wyświetlany? Jak mogę wydrukować rzeczywiste wartości?

Uprzejmie podaj swoje sugestie.

+1

Skąd wziął się ten średnik? –

+4

Czy komunikat o błędzie pojawił się prawdopodobnie w otwartym nawiasie klamrowym, takim jak '[java.lang.String;'? To byłaby wewnętrzna nazwa tablicy String. –

+0

O tak, zaczęło się od otwartej klamry [. Przepraszam za to. Nie wiedziałem, że to coś zmieni. – jobinbasani

Odpowiedz

7

Zatem interfejs API nie zwraca wektora ciągów, ale wektor ciągu [].

Powinieneś być w stanie iterować przez wektor, a następnie, dla każdego elementu, przechodzić przez macierz.

Iterator<String[]> iter = dataVector.iterator(); 

while(iter.hasNext()) { 
    String[] array = iter.next(); 
    for(int i=0; i < array.length; i++) 
    { 
     System.out.println(i + ": " + array[i]); 
    } 
} 
+0

Dzięki! To zadziała. w moim przypadku, jak powiedziałeś, Vector zwrócił String []. Dla niektórych reaom metoda api nie "wypełniła" tablic String zgodnie z oczekiwaniami ... – jobinbasani

4

Spróbuj porównać ich klasyLoaders. Jeśli są różne, pojawia się wyjątek.

StringClass1.getClassLoader()==StringClass2.getClassLoader(); 
+0

Wygląda na to, że coś próbuje rzucić tablicę 'String'ów na' String'. –

1

Nie trzeba używać iteratora. Możesz użyć metody elementAt(index) do wydrukowania wartości. Użyj pętli For, aby uzyskać indeksy Vector.

Przykład:

Vector<?> dataVector = dataAPI.getReturnVector(); 
for(int i = 0; i < dataVector.size(); i++) { 
    System.out.println(dataVector.elementAt(i)); 
} 

Jeśli otrzymujesz dziwną odpowiedź (cyfr i liter), otrzymujesz String[] obiekt. Oznacza to, że będziesz musiał użyć wbudowanej metody Arrays, aby wydrukować tablicę String[]. Zobacz komentarze poniżej.

+0

Drukuje [Ljava.lang.String; @ 25a091 [Ljava.lang.String; @ 50a11a – jobinbasani

+0

@whoopy_whale: Możesz zrobić "System.out.println (Arrays.toString (dataVector.elementAt (i));). –

+1

@ βнɛƨнǤʋяʋиɢ Aby użyć Arrays.toString, musiałem użyć generycznych jako Vector , a wynik był [] [] – jobinbasani