gpt4 book ai didi

java - 为什么还可以使用空白构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:56 25 4
gpt4 key购买 nike

我最近在阅读一些 Java,并遇到了一些对我来说很新的东西(成语?):在程序中,具有多个构造函数的类也将始终包含一个空白构造函数。例如:

public class Genotype {
private boolean bits[];
private int rating;
private int length;
private Random random;

public Genotype() { // <= THIS is the bandit, this one right here
random = new Random();
}

/* creates a Random genetoype */
public Genotype(int length, Random r) {
random = r;
this.length = length;
bits = new boolean[length];

for(int i=0;i<length;i++) {
bits[i] =random.nextBoolean();
}
}

/* copy constructor */
public Genotype(Genotype g,Random r) {
random = r;
bits = new boolean[g.length];
rating = g.rating;
length = g.length;

for(int i=0;i<length;i++) {
bits[i] = g.bits[i];
}

}
}

第一个构造函数似乎不是“真正的”构造函数,似乎在每种情况下都会使用其他构造函数中的一个。那么为什么要定义该构造函数呢?

最佳答案

我不确定您正在阅读的代码是否高质量(我过去审查过一些生物信息学代码,不幸的是,这些代码通常不是由专业开发人员编写的)。例如,第三个构造函数不是复制构造函数,这段代码通常存在问题,所以我不会“读太多”。

第一个构造函数是默认构造函数。它只初始化最低限度,让用户使用 getter 和 setter 设置其余部分。其他构造函数通常是“便利构造函数”,有助于以更少的调用创建对象。但是,这通常会导致构造函数之间的不一致。事实上,最近的研究表明,默认构造函数和后续调用 setter 的方法更可取。

在某些情况下,默认构造函数也很关键。例如,某些框架如 digester(用于直接从 XML 创建对象)使用默认构造函数。 JavaBeans 一般使用默认构造函数等。

此外,一些类继承自其他类。当父对象的初始化“足够好”时,您可能会看到默认构造函数。

在这种特定情况下,如果未定义该构造函数,则必须提前了解所有细节。这并不总是可取的。

最后,有些 IDE 会自动生成默认构造函数,可能编写该类的人都不敢将其删除。

关于java - 为什么还可以使用空白构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/402514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com