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