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

Java 为什么在每个片段中都必须有一个公共空构造函数?,java,android,android-fragments,Java,Android,Android Fragments,最近我在片段中看到了这样一句话: Fragment的所有子类都必须包含一个公共的无参数构造函数。框架通常会在需要时重新实例化片段类,特别是在状态恢复期间,并且需要能够找到此构造函数来实例化它。如果无参数构造函数不可用,则在某些情况下,在状态还原期间会发生运行时异常 在这方面,我已经阅读了以下帖子: 1. 2. 3. 4. 如果我没记错的话,Java会在没有定义构造函数时自动提供一个默认的空构造函数(就像Fragments那样),那么我们为什么还要定义一个呢?这有什么作用?如果我们不在片段中定义默

最近我在片段中看到了这样一句话:

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

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

1.

2.

3.

4.


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

如果您不定义任何构造函数,您将拥有默认的公共空构造函数,这正是您所需要的。无需明确定义它。但是,如果您创建了一个非空构造函数(这不是一种广泛使用的做法),那么您还应该始终定义公共空构造函数,在重新创建片段时系统将使用该构造函数

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

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


但是在片段的情况下,FragmentManagerImpl在进程终止后使用默认构造函数(内存不足条件)使用反射重新创建,因此您将提供的任何参数(而不是使用参数束)都将被清空

应该没有问题。该段应该改为“不要对片段使用非空构造函数”。如果没有显式空构造函数,将使用超级构造函数。只是不要使用非空构造函数:)@ElDuderino马上!文档对它的描述方式具有误导性。