换句话说,如果 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/