簡體   English   中英

實例化類的替代方法不實現父接口

[英]Alternative way to instantiate a class not implements the parent interfaces

在我不記得的某個地方,我讀到了一種使對象實例化的替代方法:

通常,我們以這種方式實例化(並分配):

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:匿名類還實現父級“實現”,如從ClassName序列化?

您正在使用帶有初始化塊的匿名類。 因此,它等效於:

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

}

new SubClass();

這種構造沒有錯-但請注意,您不是在創建ClassName類的對象,而是SubClass類的對象。

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

廣告1:這種構造方法稱為“匿名類”。

廣告2:我敢打賭,您的班級包含一個不可Serializable的字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM