【发布时间】:2013-01-24 01:53:43
【问题描述】:
我正在做一些关于 Java 的功课,但我并不擅长,并且在尝试使用 XMLEncoder 将 App 对象存储到文件时遇到问题。
简而言之,我的应用程序有一个名为 animal 的抽象类,以及另一个扩展前一个名为 dog 和 cat 的类。在我的主应用程序中,我有一个创建新动物的静态方法,该方法将新动物对象添加到 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