为什么必须在每个片段中都有一个公共空构造函数?

时间:2014-05-22 13:18:51

标签: java android android-fragments

最近我在片段docs中看到了声明:

  

Fragment的所有子类都必须包含公共无参数构造函数。框架通常会在需要时重新实例化一个片段类,特别是在状态恢复期间,并且需要能够找到此构造函数来实例化它。如果无参数构造函数不可用,则在状态还原期间的某些情况下将发生运行时异常。

在这方面,我已经阅读了以下帖子:

1。 Explicitly writing default empty constructor

2。 Default constructors and inheritance in Java

3。 Java entity - why do I need an empty constructor?

4。 Do fragments really need an empty constructor?

如果我没记错的话,当没有定义构造函数时,Java会自动提供一个默认的空构造函数(就像Fragment s的情况一样),那么为什么我们还需要定义一个呢?这有什么用途?如果我们不在Fragment

中定义默认构造函数,它会有什么不同

2 个答案:

答案 0 :(得分:1)

  

当没有定义构造函数时,Java会自动提供默认的空构造函数(与Fragments的情况一样)

是的,但是如果你有参数构造函数那么它就没有了。

但是对于片段,FragmentManagerImpl会在进程死亡(低内存条件)之后使用默认构造函数重新创建反射,因此您将提供的任何参数都将被取消,而不是使用参数bundle。

答案 1 :(得分:0)

如果你没有定义任何构造函数,你将拥有默认的公共空构造函数,它就是你需要的。无需明确定义它。但是如果你创建一个非空构造函数(这不是一个广泛使用的实践),你也应该总是定义公共空构造函数,系统将在重新创建片段时使用它。