2014-03-02 124 views
0

在什么地方,我不记得的替代办法,我读到的另一种方法instatiate一个对象:实例化一个类没有实现父接口

一般情况下,我们实例化(和分配)是这样的:

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:?一个anonnymous类还实现了父类的“实现”,如类名中的Serializable?

+3

实例初始化块与匿名类相结合。 –

+0

我怀疑你的第一个问题的答案完全与你的第二个问题无关,也不是你收到的错误。 –

回答

1

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

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

} 

new SubClass(); 

有什么错建设 - 但请注意,你没有创建类名类的对象,但子类类的对象。

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

+0

虽然在最后的一些总结,这是一个很好的答案。谢谢! – Richard

0

广告1 .:此构造被称为“匿名类”

广告2:我敢打赌你的课程包含一个不是Serializable的领域。

+0

不,我只有原始类型属性,如float和int。 – Richard

+0

请将您班级的内容添加到帖子中。 – Smutje