最近我在片段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
?
答案 0 :(得分:1)
当没有定义构造函数时,Java会自动提供默认的空构造函数(与Fragments的情况一样)
是的,但是如果你有参数构造函数那么它就没有了。
但是对于片段,FragmentManagerImpl会在进程死亡(低内存条件)之后使用默认构造函数重新创建反射,因此您将提供的任何参数都将被取消,而不是使用参数bundle。
答案 1 :(得分:0)
如果你没有定义任何构造函数,你将拥有默认的公共空构造函数,它就是你需要的。无需明确定义它。但是如果你创建一个非空构造函数(这不是一个广泛使用的实践),你也应该总是定义公共空构造函数,系统将在重新创建片段时使用它。