Witam. Mam dość spory problem. W moim programie, który jest bazą danych płyt muzycznych chciałem zrobić zapis i odczyt obiektu z pliku zewnętrznego.
Hierarchia wygląda następująco: Najpierw jest klasa abstrakcyjna AbstractMusicList, która implementuje interfejs IMusicList.
Tam mamy metody:
public void saveToFile(IMusicList l) throws IOException {
ObjectOutputStream file = new ObjectOutputStream(new FileOutputStream(
"baza.dta"));
file.writeObject(l);
file.flush();
file.close();
}
public static IMusicList restore(String name) throws IOException,
ClassNotFoundException {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(name));
IMusicList temp = (IMusicList) in.readObject();
in.close();
return temp;
}
Następnie dziedziczą z tej klasy abstrakcyjnej dwie klasy zwykłe MusicLIFOList i MusicFIFOList.
Nie ma w ich ciałach żadnych przysłonięć tych metod, bo wiadomo że dziedziczenie wystarczy.
Mam też klasę Controller (ponieważ mój projekt jest oparty o MVC), która zarządza tym wszystkim.
Wygląda to mniej więcej tak:
...
public class Controller {
private IMusicList list; // bo tu jest zwracana implementacja interfejsu za pomocą klasy
factory, czyli MusicLIFOList lub FIFO
...
list = AbstractMusicList.restore(win.txt1.getText()); // wywołanie dla odczytu
...
list.saveToFile(list); //wywołanie dla zapisu
Wydaje się, że wszystko jest ok, a jednak gdy przejechałem debuggerem okazało się, że zmienna 'file' ma w sobie nulla.
Co się dzieje?
Jest to tym bardziej dziwaczne, że wcześniej, kiedy jeszcze nie używałem klasy abstrakcyjnej, a MusicLIFOList i MusicFIFOList miały w sobie całość ciała wszystko było ok.
Dziwna sprawa.