Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Java] Castare da Array di Object ad Array di String

    Ho una funzione che restituisce un Array di tipo Object, come segue:

    Object[] response = serviceClient.invokeBlocking(opGetOper,opGetOperAr gs,returnTypes);
    Questo Array di Object contiene il risultato di una Query su un DB.




    Vorrei semplicemente, mediante un ciclo for, castare tutti gli oggetti di questo Array in oggetti di tipo String (da notare che result contiene si oggetti di tipo Object, ma in realtà sono stringhe che corrispondono alla risposta della querty sul database (dunque non sono int o double o boolean ))

    Ho provato così:



    String[] stringaCastata = new String [response.length];
    for (int ww = 0; ww < response.length; ww++) {

    stringaCastata [ww] = (String)response[ww];
    }
    Ma mi viene dato dalla JVM un errore di cast.

    Come posso risolvere?

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] Castare da Array di Object ad Array di String

    Originariamente inviato da ragnonerodocet
    Ma mi viene dato dalla JVM un errore di cast.
    Evidentemente l'oggetto reale non è davvero un String!

    Prima del cast metti un:

    System.out.println (response[ww].getClass ());

    Vedi subito di che classe è. E se non è java.lang.String ma qualcos'altro, allora hai trovato l'inghippo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sale io ho lo stesso problema!!!!!
    Il mio oggetto è proprio lava.lang.String !!!!!!
    Mi potreste dire come avete risolto

  4. #4
    Originariamente inviato da iJim
    Sale io ho lo stesso problema!!!!!
    Il mio oggetto è proprio lava.lang.String !!!!!!
    Mi potreste dire come avete risolto
    Se il tuo oggetto e' proprio java.lang.String dovresti poter fare il cast senza errori. Posta il pezzo di codice.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  5. #5

  6. #6

    Cast da Comparable[] a String[]

    Salve ragazzi avrei anch'io un problema molto simile dal quale non riesco ad uscire..

    La mia riga di codice infame è questa:
    codice:
    v = (String[])ArrayAlgs.resize(v, 2*vSize);
    Dove praticamente v è un variabile di tipo array di stringhe e
    ArrayAlgs.resize(Comparable[] a, int aSize)
    è un metodo con i suddetti parametri espliciti...e che restituisce un riferimento ad un oggetto di tipo Comparable[] (è stato creato appositamente per funzionare su vari tipi di dati)
    ecco quello che sto cercando di fare è sto benedetto cast da Comparable[] a String[]
    Ma in esecuzione ottengo questo errore:


    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Comparable; cannot be cast to [Ljava.lang.String;
    at Text.add(Text.java:51)
    at TextTester.main(TextTester.java:23)


    Cioè mi dice che non sono 2 tipi castabili tra loro ma in realtà la classe String nella libreria standard implementa l'interfaccia Comparable..Dov'è l'inghippo? come potrei risolverlo??
    Grazie infinite

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Cast da Comparable[] a String[]

    Originariamente inviato da FedeComa
    La mia riga di codice infame è questa:
    codice:
    v = (String[])ArrayAlgs.resize(v, 2*vSize);
    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Comparable; cannot be cast to [Ljava.lang.String;
    at Text.add(Text.java:51)
    at TextTester.main(TextTester.java:23)
    Se quella classe ArrayAlgs è questa che ho trovato:
    http://www.dei.unipd.it/~avanzini/fi...ArrayAlgs.java

    Si vede chiaramente cosa fa quel resize: ovvero istanzia un array di Comparable con

    Comparable[] newv = new Comparable[newLength];

    Se l'array è realmente un Comparable[], non lo si può cambiare, l'oggetto array in sé resta quello, se è un Comparable[] NON può essere un String[]. Lo si può al massimo solo "vedere" come un supertipo (es. assegnarlo ad un Object[]).


    Quel metodo poteva essere fatto in modo più "furbo" e sfruttare la reflection per istanziare un nuovo array dello stesso tipo di quello realmente passato come argomento. Allora sì, perché se il metodo "furbo" istanziasse un String[] e lo restituisse come Comparable[], l'array essendo realmente un String[] non farebbe fallire quel tuo cast a runtime.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.