это мой первый вопрос здесь, так как до сих пор я всегда находил то, что мне нужно, но на этот раз что-то относительно базовое сводит меня с ума.Итак, у меня есть этот класс:
public class QImage {
protected String imagePath;
public QImage() {
}
public QImage(String imgPath) {
imagePath = imgPath;
}
И чем:
public class DImage extends QImage implements Serializable {
protected int imageId;
public DImage(String imagePath) {
imageId = 0;
}
А потом в коде:
private void saveData(String filePath, List<DImage> imap) {
try {
FileOutputStream fileImap = new FileOutputStream(filePath);
ObjectOutputStream objectImap = new ObjectOutputStream(fileImap);
for (DImage image : imap) {
objectImap.writeObject(image);
}
И на данный момент все вроде бы хорошо, пока:
public List<DImage> loadData(String filePath) {
List<DImage> imap = new ArrayList<>();
try {
FileInputStream fileImap = new FileInputStream(new File(filePath+"_imap.dat"));
ObjectInputStream objectImap = new ObjectInputStream(fileImap);
while (true) {
try {
**imap.add((DImage) objectImap.readObject());**
} catch (EOFException e) {
break;
}
}
Я получаю String imagePath = null.Я уверен, что это что-то про конструкторы и приведение readObject к DImage, но я не знаю, как с этим справиться.Если я создаю еще одну строку в DImage, которая не унаследована от QImage, все работает нормально.
Редактировать:
Поэтому я называю это просто:
Desc desc = new Desc();
List<DImage> imagesList = desc.loadData("C:\\collective.xml");
Вещиявляется то, что конструктор по умолчанию вызывается, когда:
imap.add((DImage) objectImap.readObject());