java - Java 强制您提供无参数构造函数背后的逻辑是什么?

标签 java constructor default-constructor

换句话说,如果 Java 编译器提供默认构造函数,即使还有带参数的构造函数,也会出现什么问题?

最佳答案

一般来说,如果没有提供,Java 将提供一个无参数构造函数。

如果您有一个“arg”构造函数并且不尝试使用无参数构造函数(或定义一个),那么您就没有问题。

但是,Java 序列化库要求您有一个无参数构造函数,以便它知道如何在反序列化时创建对象。

我在库中采用的另一种方法是调用无参数构造函数(如果存在),或者仅创建对象而不调用构造函数(如果不存在)。如果您不调用构造函数,这可能会产生字段未初始化的副作用。例如

class MyClass {
    // only set if you call a constructor!
    transient final List<String> list = new ArrayList<>();
    int a;

    MyClass(int a) { this.a = a; }
}

在这种情况下,没有无参数构造函数意味着很难知道如何正确反序列化它。

关于java - Java 强制您提供无参数构造函数背后的逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55267995/

相关文章:

c++ - 找不到用户创建的类的构造函数

Java 智能卡 - 读取 Scosta 智能卡

java - 将继承参数从父类(super class)更改为子类

c++ - 元组没有按顺序构建?

c++ - C++ 中的对象初始化语法( T obj = {...} 与 T obj{...} )

wpf - 在XAML中命名没有默认构造函数的用户控件

java - Eclipse Helios中有哪些新功能?

java - 根据文件的词干名称识别文件的扩展名

c++ - 从重载的复制构造函数中调用默认复制构造函数

c++ - 实例化带/不带括号的默认构造函数