2013-11-15 27 views
1

我使用json和junit。我想用Json創建一個複雜的對象結構,但是我不能創建這個結構,因爲我得到這個異常:如何實現默認構造函數以在Json中使用複雜的對象結構?

用Gson註冊一個InstanceCreator來解決這個問題。

問題是,json結構中的一個java類沒有默認構造函數。我發現這個介紹了這個話題:

http://google-gson.googlecode.com/svn/tags/1.2.3/docs/javadocs/com/google/gson/InstanceCreator.html

這裏是java類,但現在我鴕鳥政策,我怎麼可以創建以正確的方式默認構造函數。這是一個嘗試,但它會產生編譯錯誤:

public ProductModel{ 

    private Product product; 

    // My new default constructor, but it doesn´t work 
    public ProductModel() { 
     this(Product.class); 
    } 

    public ProductModel(final Product product) { 
     super(); 
     this.product = product; 
    } 
} 

感謝您的幫助!

格爾茨 Marwief

+0

你粘貼的東西不是例外。粘貼堆棧跟蹤。你發佈的類有一個默認的構造函數。但它不編譯。發佈異常的堆棧跟蹤以及真實的相關代碼。另外,問一個問題。你在文檔中不瞭解什麼?你需要哪些幫助? –

回答

1

一個默認構造是一樣的一個沒有參數的構造函數。一個默認的構造函數是隱含的,直到你自己聲明一個。 在您的代碼片段中,您嘗試將其與另一個構造函數(默認)一起使用,並且類型無效。 Person類與Person類的實例(對象)不同。因此,你必須創建者的一個實例如下所示:

public ProductModel{ 

private Product product; 

public ProductModel() { 
    this(new Product()); 
} 

public ProductModel(final Product product) { 
    super(); 
    this.product = product; 
} 

}

GSON需要一個默認的構造函數,所以你可能要拿出另一種方法來養活你的產品型號。一個建議可能是初始化方法

public class ProductModel { 

    private Product product; 

    public ProductModel() { 

    } 

    public void init(Product product){ 
     this.product = product; 
    } 
} 

(在上述情況下,構造函數不做任何事情,因此可以刪除)。

希望這可以有一定的幫助。

相關問題