Java:XMLEncoder writeObject子对象

时间:2013-01-24 01:53:44

标签: java parent-child

我正在做一些关于Java的小作业,但我不擅长它,而且我在尝试使用XMLEncoder将App对象存储到文件时遇到问题。

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

创造动物 的 kingdom.java:

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:

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:

public class dog extends animal {

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

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

}

当我尝试运行代码时,我得到了:

java.lang.InstantiationException: dog
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(dog);
Continuing ...

我错过了什么?谢谢;)

1 个答案:

答案 0 :(得分:1)

您应该使用以下内容:

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

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

THX。