2013-08-25 81 views
1

我正在使用Gson反序列化從抽象類繼承的類。Java JSON反序列化繼承類

這裏是我的代碼:

public abstract class Mammal { 
    private String name; 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName(){ 
     return name; 
    } 
} 

public class Dog extends Mammal { 
    public void bark(){ 

    } 
} 

public class Cat extends Mammal{ 

    public void mew(){ 

    } 
} 

public class Main { 
    public static void main(String[] args) { 
     Gson gson = new Gson(); 
     Mammal dog = new Dog(); 
     String toGson = gson.toJson(dog); 
     Mammal aDog = gson.fromJson(toGson, Mammal.class); 
    } 
} 

當我運行它拋出一個異常,可有人告訴我如何解決這一問題?

+3

什麼是你所得到的例外呢? –

回答

1

在行

Mammal aDog = gson.fromJson(toGson, Mammal.class); 

您試圖反序列化到哺乳動物對象,它不能做的實例,因爲Mammal是抽象類,這意味着它不能被實例化。

你需要無論是從Mammal類的描述刪除abstract關鍵字或使用非抽象類,而不是像Dog.class

Mammal aDog = gson.fromJson(toGson, Dog.class); 
+0

謝謝。那麼如果在運行時,我不知道Dog的類是什麼,我只知道它是Mammal的一個子類,我需要將它轉換爲正確的子類,我該怎麼做? – user2716189

+0

@ user2716189這是個好問題。你應該問它作爲單獨的線程,但在你做之前檢查這[Gson教程的片段](https://sites.google.com/site/gson/gson-user-guide#TOC-Serializing-and-Deserializing-收藏與 - 對象 - 的 - 任意類型)。 – Pshemo

+0

@ user2716189同樣在[這個答案](http://stackoverflow.com/a/5813490/1393766)作者提到關於在序列化和重新驗證不同對象的集合時使用'listOfTestObject'。 – Pshemo