2014-03-02 196 views
0

在什麼地方,我不記得的替代辦法,我讀到的另一種方法instatiate一個對象:實例化一個類沒有實現父接口

一般情況下,我們實例化(和分配)是這樣的:

User userObj = new User(); 
userObj.setId(1); 
userObj.setName("Foo"); 

的另一種方式可以是:

User userObj = new User() 
{{ 
    setId(1); 
    setName("Foo"); 
}} 

我用這種替代,和它的作品。

1)任何人都知道它是什麼? Java文檔鏈接了哪些關於它的提示?

我停下來使用它,因爲我遇到了ClassName實現的接口問題,但是替代方法沒有實現。吳

public class User implements Serializable 
{ 
    private int id; 
    private String name; 
    //public Getters and Setters 
} 

2)當我試圖序列,並使用它(從一個活動傳遞到另一個,使用: putExtra(String, Serializable) 它會拋出NotSerializableException爲什麼

編輯1:?一個anonnymous類還實現了父類的「實現」,如類名中的Serializable?

+3

實例初始化塊與匿名類相結合。 –

+0

我懷疑你的第一個問題的答案完全與你的第二個問題無關,也不是你收到的錯誤。 –

回答

1

您正在使用具有初始化塊的匿名類。所以它只是一個相當於:

SubClass extends ClassName{ 
    { 
     classObj.setParam1(1); 
     classObj.setParam2(1); 
    } 

} 

new SubClass(); 

有什麼錯建設 - 但請注意,你沒有創建類名類的對象,但子類類的對象。

正如我所說的你使用匿名類(沒有名字的類)。這是不好的 - 因爲序列化/反序列化JVM應該完全知道什麼是序列化數據的類,所以基本上 - 如果要序列化它們,不要使用匿名類。

+0

雖然在最後的一些總結,這是一個很好的答案。謝謝! – Richard

0

廣告1 .:此構造被稱爲「匿名類」

廣告2:我敢打賭你的課程包含一個不是Serializable的領域。

+0

不,我只有原始類型屬性,如float和int。 – Richard

+0

請將您班級的內容添加到帖子中。 – Smutje