繁体   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