我在Java上做了一些小作業,但是我並不擅長,我在嘗試使用XMLEncoder將App對象存儲到文件時遇到了問題。Java:XMLEncoder writeObject子對象
簡而言之,我的應用程序有一個叫做animal
的抽象類,另一個擴展名爲dog
和cat
的前一個。在我的主要應用我有一個靜態方法來創建新的動物,增加了新的動物對象animal
類型的靜態的ArrayList:在 kingdom.java public static ArrayList<animal> animalArray = new ArrayList<animal>();
創建動物:
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;
}
}
現在,我的
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 Serialization有些不同。)它也非常值得堅持命名約定。 –