实例化类的替代方法不实现父接口

时间:2014-03-02 18:14:41

标签: java android inheritance assign

在某个地方,我记不住了,我读到了另一种实例化对象的方法:

通常,我们以这种方式实例化(并分配):

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?

2 个答案:

答案 0 :(得分:1)

您正在使用具有初始化块的匿名类。所以它只相当于:

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

}

new SubClass();

这种构造没有任何问题 - 但请注意,您不是在创建ClassName类的对象,而是创建SubClass类的对象。

正如我所说,你使用的是匿名类(没有名字的类)。这很糟糕 - 因为序列化/反序列化JVM应该确切地知道什么是序列化数据类,所以基本上 - 如果你想序列化它们,不要使用匿名类。

答案 1 :(得分:0)

和1:这个结构被称为“匿名类”。

广告2:我打赌你的课程中包含的字段不是Serializable