0

私はJavaで少し宿題をしていますが、それが苦手で、XMLEncoderを使用してAppオブジェクトをファイルに保存しようとすると問題が発生します。

要するに、私のアプリには、と呼ばれる抽象クラスとanimal、前のものを拡張する別のものとがdogありcatます。私のメインアプリでは、新しい動物オブジェクトを type の静的 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

You should use as following:

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

The Dog object itself can't be saved into XMLEncoder.

Thx.

于 2013-01-24T02:32:02.403 に答える