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

前端之家收集整理的这篇文章主要介绍了java – 为什么还可以使用空白构造函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近正在阅读一些 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会自动生成一个默认构造函数,编写该类的人可能会害怕消除它.

原文链接:https://www.f2er.com/java/127842.html

猜你在找的Java相关文章