Nel mio codice ho una classe Database che contiene 2 arraylist di oggetti motore e componenti.
Quando creo un oggetto di tipo Database e lo serializzano su un file, al momento deserializzazione Le arraylist sono vuote (Se inserirsi altri attributi questi verrebbero deserializzati correttamente). Se invece provo a serializzare Un arraylist Al momento della deserializzazione Questa contiene effettivamente gli oggetti aggiunti.
In entrambi i casi le arraylist vengono correttamente riempite, infatti si approva stampare un elenco degli oggetti contenuti questo ritorna esattamente questi ultimi.
Vi scrivo un po' di codice
Due classi distinte Componente e Motore Praticamente uguali (per farvi capire, in realtà sono diverse)codice:public class Database implements Serializable { private static final long serialVersionUID = 1L; static final String nomefile = "save.s"; static String S = "stringa prova"; static ArrayList<Motore> motori=new ArrayList <Motore>(); static ArrayList<Componente> componenti= new ArrayList<Componente> (); public void save() { FileOutputStream fos=null; ObjectOutputStream oos=null; try { fos = new FileOutputStream(nomefile); oos = new ObjectOutputStream(fos); oos.writeObject(this); System.out.println("database correttamente salvato."); } catch (IOException e) { e.printStackTrace(); } finally { try{ if (oos != null) oos.flush(); oos.close(); if (fos != null) fos.close(); } catch (IOException e) { e.printStackTrace(); } } public static Database load() throws IOException { FileInputStream fis = null; ObjectInputStream ois = null; Database db = null; try { fis = new FileInputStream(nomefile); ois = new ObjectInputStream(fis); db = (Database) ois.readObject(); return db; } catch (ClassNotFoundException | IOException e) { e.printStackTrace(); } finally { if (ois != null) ois.close(); if (fis != null) fis.close(); } return db; } }
codice:public class Componente/Motore implements Serializable { private String nome; public Componente/Motore(String nomef){ this.nome = nome; Database.componenti/motori.add(this); } }Ora, se provo a scriverecodice:public class Test{ private static Database database ; Motore M1 = new Motore("motore1"); Motore M2 = new Motore("motore2"); Componente C1 = new Componente("componente1"); Componente C2 = new Componente("componente2"); Componente C3 = new Componente("componente3"); Componente C4 = new Componente("componente4"); database.save(); }
Le arraylist sono vuote ma la String "stringa prova" è stata deserializzata correttamente...codice:public class Test{ private static Database database ; /* Motore M1 = new Motore("motore1"); * Motore M2 = new Motore("motore2"); * Componente C1 = new Componente("componente1"); * Componente C2 = new Componente("componente2"); * Componente C3 = new Componente("componente3"); * Componente C4 = new Componente("componente4"); * database.save(); */ Database.load(); }
Ci sto sbattendo la testa da una settimana, non capisco proprio...
Spero possiate aiutarmi

Rispondi quotando
