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

    [JAVA]Stranezza con cast da Object[] a String[]

    Salve a tutti ,
    ho questo codice
    codice:
    Set key=tabNomi.keySet();
    String[] tmp=(String[])key.toArray();
    che lancia un ClassCastException... e non riesco a capire perchè , essendo l'array che viene restituito dal keyset un array si stringhe...
    mentre se scrivo il seguente codice tutto funziona
    codice:
    Set key=tabNomi.keySet();
    Object[] tmp=key.toArray();
    String ris[]=new String[tmp.length];
    for(int i=0;i<tmp.length;i++)
      ris[i]=(String)tmp[i];
    return ris;
    Come si può notare il cast semplice (String) noncausa exception , mentre il cast (String[]) si...
    Mah..
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  2. #2
    Probabilmente Java impedisce questo tipo di casting, forse per il modo in cui i vettori sono gestiti e/o memorizzati. Purtroppo/per fortuna la JVM non me l'hanno fatta studiare...
    In pratica, la struttura di memoria che contiene l'una non e' adatta a contenere l'altra (o potrebbe non esserlo, a seconda della piattaforma). Mia ipotesi, eh...
    O piu' semplicemente: la classe String[] non e' una sottoclasse di Object[] anche se i loro componenti fondamentali sono in quella relazione, per cui il cast viene inibito.

    Ciao.

  3. #3

    P.S.

    Probabilmente ci hai gia' pensato e non ti e' possibile farlo, cmq...
    Dovresti dichiarare l'array restituito da toArray come String[] anche se poi lo ritorni come Object[]

  4. #4
    Ultima aggiunta: se casti l'array come String[], nessuno poi ti assicura che i suoi componenti siano tutti compatibili col tipo String... Andrebbero controllati uno ad uno, per quella che e' la filosofia Java di incoraggiare una programmazione "consistente".

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Non si puo fare questo tipo di cast in java

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  6. #6

    Re: P.S.

    Originariamente inviato da dekdek
    Probabilmente ci hai gia' pensato e non ti e' possibile farlo, cmq...
    Dovresti dichiarare l'array restituito da toArray come String[] anche se poi lo ritorni come Object[]
    Esattamente La classe è una standard di java

    X anx721
    Sinceramente è una cosa strana...Sai il perchè non si può fare?
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  7. #7
    Credo il motivo sia quello che ho scritto nell'"ultima aggiunta"... E' una cattiva pratica di programmazione che puo' portare ad errori in parti del codice lontane da quella che e' stata la causa (il casting)

    Provato ad usare l'altra forma di toArray fornendo String[] come argomento?

  8. #8
    codice:
        public static void main(String args[]) {
            Set key = new HashSet();
            key.add ("1");
            key.add("2");
            key.add("3");
            String s[] = new String [key.size()];
            key.toArray(s);
            for (int b=0; b<s.length; b++)
                System.out.println(s[b]);
        }
    Questo codice mi da' dei warning pero' funziona...
    Mo' vedo che dice il compilatore...

  9. #9
    Ah, non ho acchiappato le eccezioni...

  10. #10
    Ah quello intendevi ? No , non l'ho provato
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

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.