Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    [Java] ClassCastException in Vector.toArray()

    Ciao ragazzi. Ho un piccolo problemino che mi affligge e che mi "sconvolge".

    Osservate questo codice:
    codice:
    StringTokenizer st = new StringTokenizer(miaStringa, ":", true);
    Vector v = new Vector();
    
    // Riempio il vettore con tutti i token della stringa
    while (st.hasMoreTokens()) {
       v.add(st.nextToken());
    }
    
    // Creo un array con tutti i token della stringa
    System.out.println(v.elementAt(0).getClass().getName());
    String [] arrayToken = (String []) v.toArray();
    Io so con certezza che la stringa 'miaStringa' non è vuota, non è null e contiene sicuramente del testo. Quindi so con certezza che il vettore conterrà almeno un elemento (Oggetto di tipo String).

    Ebbene: mi viene riportato un errore nell'ultima riga del codice che ho riportato. L'errore è un ClassCastException. :master:

    Forse oggi ho la testa un po' fra le nuvole, ma proprio non capisco perchè mi venga sollevata questa eccezione in esecuzione. Da notare che la riga precedente mi restituisce correttamente il seguente output:
    codice:
    java.lang.String
    Di per sé non è un problema, perchè posso comunque costruire il mio array in questo modo
    codice:
    String [] arrayToken = new String[v.size()];
    for (int i=0; i<v.size(); i++) {
       arrayToken = (String) v.elementAt(i);
    }
    ma quello che non capisco è perchè venga sollevata quell'eccezione. Il vettore contiene ALMENO una stringa. Gli chiedo di ritornarmi un Object[] che casto a String[] e mi va in errore... PERCHE'???

    Grazie a chiunque mi faccia tornare con i piedi per terra.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Anche io sono incorso in usa situazione simile, ma è una caratteristica di java; ti riporto la risposta data sul sito della sun ad un utente che segnalava come un bug il sollevamento della ClassCastException con queste righe di codice:


    Codice PHP:
           Object o[] = {"1","2"};
           
    String[] = (String[]) o

    Risposta:


    Not a bug. The VM is behaving according to the JLS.
    The rules for casting in JLS 5.5 do not permit
    a value of runtime class Object[] to be converted to String[], even if the actual values of the elements all happen to be string. Consider, for example, that an Object[] may have elements of different types, and the runtime cannot know, without looking at the actual values of each element, that they can all be converted to a String. The JLS rules are designed to avoid examining the
    values in this way.

    The compiler must accept a cast from Object[] to String[], however, since an Object[] variable may in fact hold a value whose runtime class is String[].

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Grazie mille per la risposta. Mi rassegnerò alla conversione manuale.

    Mi fa piacere, almento, di non essere io completamente andato!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.