Visualizzazione dei risultati da 1 a 8 su 8

Visualizzazione discussione

  1. #5
    Grazie andbin.
    Ieri, lavorandoci un pò su, ho tirato fuori questo.
    codice:
    public List<X> readElement(Class<? extends X> cl, String fileName){
            List<X> list = new ArrayList<>();
    
            try (
                    final InputStream file = new FileInputStream (fileName);
                    final InputStream bstream = new BufferedInputStream (file);
                    final ObjectInputStream ostream = new ObjectInputStream (bstream);
                    )
            {
                while (true) {
                    Object obj = ostream.readObject();
                        list.add(cl.cast(obj));
                }
            } catch (EOFException e) {
                System.out.println("Ok: file finito, esce");
            } catch (FileNotFoundException e) {
                System.out.println("Ok: file non trovato, lo crea");
                File f = new File(fileName);
                try {
                    f.createNewFile();
                } catch (IOException e1) {
                    /*Non entra mai qui*/
                    e1.printStackTrace();
                }
            } catch (IOException e) {
                System.out.println("Errore: file corrotto");
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (ClassCastException e) {
                System.out.print("Errore: cast errato");
            }
            
            return list;
            
        }
    Ho deciso, come hai giustamente fatto notare, che era poco intuitivo passare il file, o comunque il path, al costruttore.
    Così. istanziando un solo oggetto della classe, posso scrivere e leggere da qualunque file senza vincoli (mi è venuto il dubbio...non è forse meglio farli statici a sto punto? Al costruttore alla fine non passo nulla)


    Quote Originariamente inviata da andbin Visualizza il messaggio
    public <T> List<T> deserializeItems(Class<T> aClass)
    Ero partito anche io così, ma ho riscontrato un problema.
    Quando vado a istanziare la classe, se provo a passare al metodo una classe diversa da quella utilizzata per la creazione, nemmeno mi compila.
    Per intenderci:
    codice:
    ReaderWriter<Highscore> rw = new ReaderWriter<>();
    rw.readElement(Highscore.class, "miofile.txt"); // fino qui tutto ok
    rw.readElement(ClasseABC.class, "miofile.txt");//non mi compila nemmeno
    Notato questo, sono arrivato alla soluzione sopra (anche se non mi convince troppo).
    Adesso è così:
    codice:
    ReaderWriter<Object> rw = new ReaderWriter<>();
    rw.readElement(Highscore.class, "miofile.txt");
    rw.readElement(ClasseABC.class, "miofile.txt");
    rw.readElement(ClasseABCDEF.class, "miofile.txt");
    Quindi, ricapitolando.
    Così può andare bene o c'è un errore concettuale di fondo? (Il fatto di istanziare la classe come ReaderWriter<Object> mi sembra un "trucco", non una soluzione)
    Però se non scrivo "Object" dovrei istanziare un ReaderWriter per ogni classe, e se devo istanziare un ReaderWriter per ogni classe, inutile che gli passo una classe come parametro
    Sarebbe meglio cambiare facendo diventare tutto statico?
    Grazie
    Ultima modifica di Mirco993; 19-06-2018 a 09:53

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.