2013-01-24 22 views
0

我在Java上做了一些小作業,但是我並不擅長,我在嘗試使用XMLEncoder將App對象存儲到文件時遇到了問題。Java:XMLEncoder writeObject子對象

簡而言之,我的應用程序有一個叫做animal的抽象類,另一個擴展名爲dogcat的前一個。在我的主要應用我有一個靜態方法來創建新的動物,增加了新的動物對象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?謝謝;)

+0

不會'狗'需要正常使用的無參數構造函數嗎? (這與Java Serialization有些不同。)它也非常值得堅持命名約定。 –

回答

1

你應該如下使用:

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

Dog對象本身不能保存到XMLEncoder中。

Thx。

+1

我認爲這足以滿足我的需求,謝謝。 – TCB13