首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java: XMLEncoder writeObject子对象

Java: XMLEncoder writeObject子对象
EN

Stack Overflow用户
提问于 2013-01-24 01:53:43
回答 1查看 1.4K关注 0票数 0

我正在做一些关于Java的家庭作业,但是我不擅长它,而且我在尝试使用XMLEncoder将应用程序对象存储到一个文件时遇到了问题。

简而言之,我的应用程序有一个名为animal的抽象类,还有一个扩展了前一个名为dogcat的类。在我的主要应用程序中,我有一个创建新动物的静态方法,它将新的动物对象添加到ArrayList类型为animalpublic static ArrayList<animal> animalArray = new ArrayList<animal>();的静态

kingdom.java:上创建一个动物

代码语言:javascript
复制
private static void newAnimal(ArrayList<animal> animalArray) {
            System.out.print("  Enter a name for the dog > ");
            animalArray.add(new dog(keyboard.nextLine()));
            System.out.println("  New dog with name " + animalArray.get(animalArray.size()-1).getName() + ".\n");

            try {
                FileOutputStream afos = new FileOutputStream("animals.xml");
                XMLEncoder encoder = new XMLEncoder(afos);
                encoder.writeObject(animalArray.get(animalArray.size()-1));
                encoder.close();
            } catch(IOException ioe){
                System.out.print("[ERROR!]");
            }
}

我的抽象动物类:animal.java:

代码语言:javascript
复制
public abstract class animal {

    private static int alloc = 0;
    protected int id;
    private String name;

    animal() {
        alloc++;
        id = alloc;
    }

    public void play() {
        System.out.print("   The animal (" + this.id + ") " + this.name + " is now playing... ");
    }

    public void setName(String lname) {
        this.name = lname;
    }

    public String getName() {
        return this.name;
    }

    public static int countAnimals() {
        return alloc;
    }

}

现在我的狗课:dog.java:

代码语言:javascript
复制
public class dog extends animal {

    dog(String theName) {
        this.setName(theName);
    }

    @Override
    public void play() {
        super.play();
        System.out.println(" Dog Stuff!");
    }

}

当我试图运行我得到的代码:

代码语言:javascript
复制
java.lang.InstantiationException: dog
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(dog);
Continuing ...

我遗漏了什么?(谢谢;)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-24 02:32:02

您应该如下所示:

encoder.writeObject(animalArray.get(animalArray.size()-1).getName());

Dog对象本身无法保存到XMLEncoder中。

谢谢。

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

https://stackoverflow.com/questions/14492644

复制
相关文章

相似问题

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