[英]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.