0

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

简而言之,我的应用程序有一个抽象类animal,另一个扩展了前一个类,叫做dogand cat。在我的主应用程序中,我有一个创建新动物的静态方法,该方法将新动物对象添加到类型为静态的 ArrayList 中animalpublic 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 ...

我错过了什么?谢谢 ;)

4

1 回答 1

1

你应该使用如下:

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

Dog 对象本身不能保存到 XMLEncoder。

谢谢。

于 2013-01-24T02:32:02.403 回答