【问题标题】:Java: XMLEncoder writeObject child objectJava:XMLEncoder writeObject 子对象
【发布时间】:2013-01-24 01:53:43
【问题描述】:

我正在做一些关于 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 ...

我错过了什么?谢谢;)

【问题讨论】:

  • 不会dog 需要无参数构造函数才能正常使用吗? (这有点不像 Java 序列化。)遵守命名约定也很值得。

标签: java parent-child


【解决方案1】:

你应该使用如下:

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

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

谢谢。

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 2016-02-23
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    相关资源
    最近更新 更多