Hej! Stworzyłem sobie listę ArrayList w której skład jako kolejne elementy wchodzą własne klasy (zamiast np int czy string).
Wszystko fajnie się serializuje do pliku, natomiast problem jest przy deserializacji.
Jest rzucany wyjątek "java.util.ArrayList cannot be cast to ustawieniatestulibrary.UstawieniaTestu2" a przy kompilacji jest ostrzeżenie foojava uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.foo
Kod źródłowy tzn. fragment
// tutaj w osobnym pliku jar przechowuje klase ktora serializuje
// ten plik jest wspoldzielony pomiedzy 2 programy
// TestPytania.java
package ustawieniatestulibrary;
import java.io.*;
public class TestPytania implements Serializable {
private static final long serialVersionUID = 1L;
public String TrescPytania = null;
public String Odpowiedz1Tresc = null;
public String Odpowiedz2Tresc = null;
public String Odpowiedz3Tresc = null;
public String Odpowiedz4Tresc = null;
public boolean Odpowiedz1CzyPoprawna = false;
public boolean Odpowiedz2CzyPoprawna = false;
public boolean Odpowiedz3CzyPoprawna = false;
public boolean Odpowiedz4CzyPoprawna = false;
public int IloscPunktowZaPoprawnaOdpowiedz = 0;
// itp.
}
}
// modul glowny edytora w ktorym chce wczytywac i zapisywac kolekcje ArrayList z pytaniami do testu.
// kazdy element w ArrayList to osobne pytanie z odpowiedzami itp.
public ArrayList <ustawieniatestulibrary.TestPytania>ListaPytan = new ArrayList<ustawieniatestulibrary.TestPytania>();
....
// serializacja - tutaj jest ok, przynajmniej w notatniku wyglada na to ze zapisuje wszystko
public boolean ZapiszTestDoPliku(String nazwa_pliku)
{
try
{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(nazwa_pliku));
out.writeObject(ListaPytan);
out.close();
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(this, e.toString(), "Błąd", JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
JOptionPane.showMessageDialog(this, e.toString(), "Błąd", JOptionPane.ERROR_MESSAGE);
}
return true;
}
//...
public void OtworzPlikZTestem(String nazwa_pliku)
{
ArrayList <ustawieniatestulibrary.TestPytania>lista_pytan2 = new ArrayList <ustawieniatestulibrary.TestPytania>();
try
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(nazwa_pliku));
// tutaj ponizej cos jest nie tak :/ rzuca ten wyjatek
lista_pytan2 = (ArrayList <ustawieniatestulibrary.TestPytania>) in.readObject();
}
catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(this, e.toString() + " " + nazwa_pliku, "Błąd", JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
JOptionPane.showMessageDialog(this, e.toString() + " " + nazwa_pliku, "Błąd", JOptionPane.ERROR_MESSAGE);
}
catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(this, e.toString() + " " + nazwa_pliku, "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
Może niewłaściwie używam typów generycznych?
Sam nie wiem. W przypadku standardowych typów danych czy pojedynczej klasy jest ok, tylko jest problem, jak chce zrobić serializacje własnych typów danych do ArrayList
Z góry dzięki za pomoc :)