2012-02-01 16 views
6

Sto ottenendo un vettore dall'API di un prodotto.[java.lang.String; non può essere lanciato su java.lang.String

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

Il vettore dovrebbe contenere stringhe come valore. Sono in grado di stampare la dimensione del vettore come 2. Ma per qualche motivo non sono in grado di iterare e stampare i valori.

ho cercato

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

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

finisco sempre per ottenere un

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

ho usato

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

e si è rivelato essere solo java.lang.String.

Googled un po 'e hanno trovato un problema simile a http://prideafrica.blogspot.com/2007/01/javalangclasscastexception.html

ho cercato di impostare i farmaci generici come String[], ma ha finito con lo stesso errore.

Se il vettore contiene java.lang.String, perché ottengo questa eccezione di trasmissione? Come posso stampare i valori attuali?

Si prega di fornire i vostri suggerimenti.

+1

Da dove viene questo punto e virgola? –

+4

Forse il messaggio di errore inizia con una parentesi aperta come '[java.lang.String;'? Quello sarebbe il nome interno di un array di stringhe. –

+0

Oh sì, è iniziato con una parentesi aperta [. Mi dispiace per averlo perso. Non sapevo che avrebbe fatto la differenza. – jobinbasani

risposta

7

Quindi l'API non restituisce un vettore di stringhe ma un vettore di stringa [].

Si dovrebbe essere in grado di scorrere il vettore e quindi, per ciascun elemento, eseguire il ciclo attraverso la matrice.

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

Grazie! Questo funzionerà. nel mio caso, come hai detto il Vettore stava restituendo String []. Per alcuni motivi, il metodo API non ha "compilato" gli array di stringhe come previsto ... – jobinbasani

4

Prova a confrontare i loro lettori di classe. Se sono diversi, si verifica questa eccezione.

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

Sembra che qualcosa stia provando a lanciare un array di 'String's su' String'. –

1

Non è necessario utilizzare un iteratore. È possibile utilizzare il metodo elementAt(index) di Vector s per stampare i valori. Utilizzare un ciclo For per ottenere gli indici di Vector.

Esempio:

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

Se hai trovato una risposta strana (di numeri e lettere), si ottiene un oggetto String[]. Ciò significa che sarà necessario utilizzare il metodo integrato di Arrays per stampare l'array String[]. Vedi i commenti qui sotto.

+0

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

+0

@whoopy_whale: Si può fare 'System.out.println (Arrays.toString (dataVector.elementAt (i)));'. –

+1

@ βнɛƨнǤʋяʋиɢ Per utilizzare Arrays.toString, ho dovuto usare i farmaci generici come vettore e l'uscita era [] [] – jobinbasani

Problemi correlati