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

    [JAVA] Unchecked cast con metodo readObject()

    Ciao,
    ho letto il regolamento e cercato nella lista delle "faq" e non ho trovato la risposta al mio problema...

    Ho questa porzione di codice:
    codice:
    ...
    //CAMPO
    private SortedMap<B,C> a;
    
    //COSTRUTTORE
    public A() {
      a = new TreeMap<B,C>();
    }
    ...
    //METODI
    ...
    public void m(String nf) {      
          FileInputStream in = new FileInputStream(nf);
          ObjectInputStream obj = new ObjectInputStream(in);
          a = (TreeMap<B,C>)obj.readObject();
          obj.close();
          in.close();
    ...
    Quando compilo mi da delle note:
    Note: File.java uses unchecked or unsafe operations
    Note: Recompile with -Xlint:unchecked for details.
    Compilando con -Xlint mi da questo:
    warning: [unchecked] unchecked cast
    found: java.lang.Object
    required: java.util.TreeMap<B,C>
    \ta = (TreeMap<B,C>)obj.readObject();

    Come posso risolvere il problema del cast?
    Grazie ciao.

  2. #2
    Nessuno sa aiutarmi?
    Sto impazzendo... :berto:

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

    Re: [JAVA] Unchecked cast con metodo readObject()

    Originariamente inviato da djdan8787
    Quando compilo mi da delle note:
    Note: File.java uses unchecked or unsafe operations
    Note: Recompile with -Xlint:unchecked for details.
    Compilando con -Xlint mi da questo:
    warning: [unchecked] unchecked cast
    found: java.lang.Object
    required: java.util.TreeMap<B,C>
    \ta = (TreeMap<B,C>)obj.readObject();

    Come posso risolvere il problema del cast?
    Il cast è necessario, in quanto readObject ritorna un Object. E il cast è unchecked, in quanto il compilatore non può garantire che quel Object sia realmente un TreeMap<B,C>.

    Se vuoi puoi "sopprimere" il warning applicando al metodo la annotazione @SuppressWarnings("unchecked")
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Eilà, grazie innanzitutto!
    hH provato a mettere quella stringa @SuppressWarnings("unchecked") sul metodo ma non va, cioè mi fa errore, forse non la metto nel posto giusto, ma comunque è un progetto da consegnare agire in questo modo è corretto? Se viene caricato un oggetto diverso da TreeMap solleva ugualmente l'eccezione no? Fammi sapere... ciao

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da djdan8787
    hH provato a mettere quella stringa @SuppressWarnings("unchecked") sul metodo ma non va, cioè mi fa errore, forse non la metto nel posto giusto
    Le annotazioni sono una funzionalità disponibile solo con Java 5 o superiore. E comunque le annotazioni in genere si mettono appena prima della dichiarazione a cui si vuole applicare la annotazione.

    Cioè in genere si fa:
    codice:
    @SuppressWarnings("unchecked")
    public void blabla ( ) { ... }
    Si potrebbe anche fare
    codice:
    public @SuppressWarnings("unchecked")
    void blabla ( ) { ... }
    ma è 'na schifezza!

    Originariamente inviato da djdan8787
    ma comunque è un progetto da consegnare agire in questo modo è corretto?
    Il cast ci vuole, su questo non ci sono dubbi.

    Originariamente inviato da djdan8787
    Se viene caricato un oggetto diverso da TreeMap solleva ugualmente l'eccezione no?
    Avendo messo un cast, sei tu che devi essere sicuro che la readObject possa tirare fuori solo TreeMap, altrimenti ti becchi ClassCastException!

    Ma poi c'è ancora un'altra questione che è appunto quella dei generics. Sei sicuro che la readObject tiri fuori un TreeMap che contiene chiavi e valori dello stesso tipo usato per istanziare la classe? Perché se fossero diversi i tipi, non ti becchi subito ClassCastException (perché è comunque un TreeMap) ma hai poi problemi in seguito quando ci fai delle operazioni.

    Quindi ... occhio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Pensandoci è un database...
    e nel database c'è solo un metodo che praticamente salva con stream e salva lo stesso oggetto... riporto il tutto... se mi dai un parere su come è scritto mi farebbe piacere...
    Ti ringrazio di tutto...

    ...
    @SuppressWarnings("unchecked")
    public void load(String nomeFile) {
    try {
    FileInputStream in = new FileInputStream(name);
    ObjectInputStream obj = new ObjectInputStream(in);
    a = (TreeMap<B,C> )obj.readObject();
    obj.close();
    in.close();
    }catch(FileNotFoundException e) {
    System.out.println(e.getMessage());
    }catch (StreamCorruptedException e) {
    System.out.println("Formato file non valido!");
    }catch (ClassCastException e) {
    System.out.println("Il file non contiene un database!");
    }catch(IOException e) {
    System.out.println(e.getMessage());
    }catch(ClassNotFoundException e) {
    System.out.println(e.getMessage());
    }
    }public void load(String name) {
    ...
    ...
    public File print(String name) {
    File file = new File(name);
    try {
    FileOutputStream out = new FileOutputStream(file);
    PrintStream print = new PrintStream(out);

    Iterator it = m.keySet().iterator();
    B b;
    C c;
    while (it.hasNext()) {
    b = (B) it.next();
    c= getC(b);
    ps.println(b.toString() + " " + c.toString());
    }
    }catch(AException e) {
    System.out.println(e);
    }catch(IOException e) {
    System.out.println(e);
    }

    return file;
    }
    ...

    Ma se viene caricato un file inesistente, o che non contanga una treemap penso che stampi un errore dato che c'è il try o no? In caso come dovrei modificare? Che altre eccezioni potrebbero verificarsi?

    Ciao

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.