Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457

    Cast tra Object a una sua sottoclasse--java

    salve a tutti,

    per quale ragione non si puo' trasformare una lista di Object in una lista di stringhe???

    ecco il codice che da' l'errore:

    codice:
    List list = new ArrayList();
    	
    	list.add("2009");
    	list.add("2010");
    	list.add("2000");
    	list.add("1999");
    	String[] c=new String[15];
    	c[0]="TRE";
    	
    	String[] listino=(String[])list.toArray();
    	for (String oggettino : listino){
    		System.out.println("oggettino    =   "+oggettino);
    		
    	}
    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

    ecco un codice un pochino diverso ma che non da' nessuna eccezione
    codice:
    List list = new ArrayList();
    	
    	list.add("2009");
    	list.add("2010");
    	list.add("2000");
    	list.add("1999");
    	String[] c=new String[15];
    	c[0]="TRE";
    	
    	String[] listino=(String[])list.toArray(new String[0]);  // cast giusto
    	for (String oggettino : listino){
    		System.out.println("oggettino    =   "+oggettino);
    		
    	}
    come mai?
    c'è un modo diverso di convertire una lista di oggetti x in una array di sottoggetti x ???

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Non farti trarre in inganno dal fatto che la tua lista contiene solo stringhe.
    Quando nel primo caso chiami la toArray() ti viene ritornato un oggetto di tipo "array di Object": non puoi effettuare un casting ad "array di String" per lo stesso motivo per cui non puoi fare

    codice:
    Object o = new Object();
    
    String s = (String)o;
    Una String è SEMPRE anche un Object, ma non è detto che un Object sia anche una String (come nell'esempio qui sopra).

    Nel secondo caso, invece, come puoi verificare sulla documentazione

    %29]http://download-llnw.oracle.com/javase/1.5.0/docs/api/java/util/List.html#toArray%28T[]%29

    ti viene già ritornato un "array di String", e quindi il casting è in realtà perfettamente superfluo

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

    Re: Cast tra Object a una sua sottoclasse--java

    Originariamente inviato da Mitele
    codice:
    String[] listino=(String[])list.toArray();
    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
    Perché questo toArray() istanzia realmente un Object[] che ovviamente non è un String[]. Sto parlando proprio del tipo dell'oggetto array (non del suo contenuto).

    Originariamente inviato da Mitele
    codice:
    String[] listino=(String[])list.toArray(new String[0]);  // cast giusto
    Questo è corretto, perché questo toArray() che riceve già un array va ad istanziare (solo se necessario e in questo caso lo è perché passi un array vuoto) un array sfruttando la "reflection" andando a vedere di che tipo è l'array passato come argomento.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: Re: Cast tra Object a una sua sottoclasse--java

    Originariamente inviato da andbin
    Perché questo toArray() istanzia realmente un Object[] che ovviamente non è un String[]. Sto parlando proprio del tipo dell'oggetto array (non del suo contenuto).
    proprio per questo motivo bisogna "girarci intorno" e ahimè creare funzioni di conversione dell'intero array (oppure trattare in modo differente l'oggetto)

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

    Re: Re: Re: Cast tra Object a una sua sottoclasse--java

    Originariamente inviato da valia
    proprio per questo motivo bisogna "girarci intorno"
    Proprio per questo esiste l'altro toArray .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: Re: Re: Re: Cast tra Object a una sua sottoclasse--java

    Originariamente inviato da andbin
    Proprio per questo esiste l'altro toArray .....
    spe che rivedo le API (anche perché a volte le cose me le scordo)

    ok, riletta l'API...mi confonde sempre quel new String[0], non è la prima volta che lo vedo, più di una volta me ne sono tornata alle API, ma leggerlo ogni volta è come se mi dicesse che ti passo dove scrivere, non il tipo di ritorno che a me interessa...è come se nella mia testa non ci volesse entrare quel concetto (quindi per questo ci giro intorno )
    Che sia questa la volta buona O_o???

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.