简体   繁体   English

Java:XMLEncoder writeObject子对象

[英]Java: XMLEncoder writeObject child object

I'm doing a little homework on Java, but I'm not good at it and I'm having issues trying to use XMLEncoder to store an App objects to a file. 我正在Java上做一些功课,但我不擅长此事,并且在尝试使用XMLEncoder将App对象存储到文件时遇到问题。

In short my App has and abstract class called animal and another ones that extend the previous one called dog and cat . 简而言之,我的App有一个抽象类叫做animal ,另一个扩展了前一个类的dogcat In my main App I've a static method to create new animals that adds the new animal object to a static ArrayList of type animal : public static ArrayList<animal> animalArray = new ArrayList<animal>(); 在我的主要应用我有一个静态方法来创建新的动物,其将所述新的动物对象类型的静态的ArrayList animalpublic static ArrayList<animal> animalArray = new ArrayList<animal>();

Creating an animal at kingdom.java: 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!]");
            }
}

My abstract animal class: animal.java: 我的抽象动物类: 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;
    }

}

Now, my dog class: dog.java: 现在,我的狗类: dog.java:

public class dog extends animal {

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

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

}

When I try to run the code I get: 当我尝试运行代码时,我得到:

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

What am I missing? 我想念什么? Thank you ;) 谢谢 ;)

You should use as following: 您应该使用以下方法:

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

The Dog object itself can't be saved into XMLEncoder. Dog对象本身无法保存到XMLEncoder中。

Thx. 谢谢。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM