2013-03-15 44 views
0

我有一個很好的課。它有一個很好的內部類。這個內部類有一些很好的公共變量。即使沒有靜態的東西,也不能進行靜態引用?

如何在外部類的構造函數中使用內部類的變量?

public class Outer { 
    class Inner { 
     public int id; 
     public Inner() { } 
    } 

    public Outer() { 
     System.out.println(Inner.id); // Error! 
    } 
} 

「無法對非靜態字段Inner.id進行靜態引用」。

該項目正在使用Gson;在內部類和它的屬性ID是由一些JSON定義的,就像這樣:

{ 
    "Outer": { 
     "Inner": { 
      "id": 0 
     } 
    } 
} 

我然後調用使用GSON像正常的序列化。

Gson gson = new Gson(); 
Outer o = gson.fromJson(json, Outer.class); 

有什麼我在做錯了嗎?我可以將Inner與id一起更改爲靜態類,但這會讓Gson嘔吐。我可以設置靜態getter和setter,但這也不起作用。

任何幫助,將不勝感激。

+0

製作ID靜態,如果你想參考它的方式。 – 2013-03-15 06:40:39

回答

0

嘗試使用System.out.println(new Inner()。id);

0

System.out.println(new Inner()。id);

4

以上所有建議都是正確答案,但我會建議您的內部類應該是靜態的。因爲

InnerClass的實例只能存在於OuterClass的實例中,並且可以直接訪問其封閉實例的方法和字段。

要實例化一個內部類,必須首先實例化外部類。接着,以該

+0

感謝您的回覆。但我不認爲把它變成靜態會讓它和Gson玩得很好。他們的文檔[有點令人困惑](https://sites.google.com/site/gson/gson-user-guide)。 – 2013-03-15 06:50:03

+0

只需添加一點細節,'Inner.id'是一個靜態引用,因爲您引用了類,而不是該類的一個實例,因此是錯誤。 – Simon 2013-03-15 06:50:19

+0

_「要實例化一個內部類,必須首先實例化外部類,然後用這個」在外部對象中創建內部對象「你可以舉一個例子嗎? – 2013-03-15 06:51:33