在某个地方,我记不住了,我读到了另一种实例化对象的方法:
通常,我们以这种方式实例化(并分配):
User userObj = new User();
userObj.setId(1);
userObj.setName("Foo");
另一种方法可能是:
User userObj = new User()
{{
setId(1);
setName("Foo");
}}
我正在使用这种替代方案,它有效。
1)任何人都知道它是什么?关于它的Java文档链接在哪里?
我停止使用它,因为我遇到了ClassName
实现的接口问题,但是替代方法没有实现。 OO
public class User implements Serializable
{
private int id;
private String name;
//public Getters and Setters
}
2)当我尝试序列化并使用它时(从一个活动传递到另一个活动,使用:
putExtra(String, Serializable)
它会抛出NotSerializableException。为什么?
编辑1:anonnymous类还实现了父'实现',比如ClassName中的Serializable?
答案 0 :(得分:1)
您正在使用具有初始化块的匿名类。所以它只相当于:
SubClass extends ClassName{
{
classObj.setParam1(1);
classObj.setParam2(1);
}
}
new SubClass();
这种构造没有任何问题 - 但请注意,您不是在创建ClassName类的对象,而是创建SubClass类的对象。
正如我所说,你使用的是匿名类(没有名字的类)。这很糟糕 - 因为序列化/反序列化JVM应该确切地知道什么是序列化数据类,所以基本上 - 如果你想序列化它们,不要使用匿名类。
答案 1 :(得分:0)
和1:这个结构被称为“匿名类”。
广告2:我打赌你的课程中包含的字段不是Serializable
。