首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java readObject和带有继承的强制转换

Java readObject和带有继承的强制转换
EN

Stack Overflow用户
提问于 2018-06-09 02:16:05
回答 1查看 196关注 0票数 0

这是我在这里的第一个问题,因为到目前为止,我一直都能找到我需要的东西,但这一次,一些相对基础的东西让我发疯。所以我有这样一个类:

代码语言:javascript
复制
public class QImage {
protected String imagePath;

public QImage() {

}

public QImage(String imgPath) {
    imagePath = imgPath;
}

然后:

代码语言:javascript
复制
public class DImage extends QImage implements Serializable {
protected int imageId;

public DImage(String imagePath) {
    imageId = 0;
}

在后面的代码中:

代码语言:javascript
复制
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);
    }

在这一点上,一切似乎都很好,直到:

代码语言:javascript
复制
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有关,但我不知道如何处理这些问题。如果我在不是从QImage继承的DImage中创建另一个字符串,一切都会正常工作。

编辑:

所以我简单地叫它:

代码语言:javascript
复制
    Desc desc = new Desc();
    List<DImage> imagesList = desc.loadData("C:\\collective.xml");

问题是,默认构造函数在以下情况下被调用:

代码语言:javascript
复制
imap.add((DImage) objectImap.readObject());
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 02:32:09

您将获得imagePath==null,因为类DImage从未执行过设置此字段的构造函数QImage(String)

代码语言:javascript
复制
public class DImage extends QImage implements Serializable {
protected int imageId;

public DImage(String imagePath) {
    super(imagePath); // <-- you have to call the constructor
    imageId = 0;
}

编辑:此外,您必须使您的类QImage实现Serializable,因为只有实现此接口的类的字段才会被保存/恢复(只是验证)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50766351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档