我有以下类(class):

class Pair
{
    String car;
    Integer cdr;

    public Pair () {}
    public Pair (String car) { this.car = car; }
    public Pair (Integer cdr) { this.cdr = cdr; }

    public Pair (String car, Integer cdr)
    {
        this(car);
        this(cdr);
    }
}

该类包含两个可选值,我想提供所有可能的构造函数排列。第一个版本不初始化任何内容,第二个版本仅初始化第一个值,第三个版本仅初始化第二个值。

最后一个构造函数是第二个和第三个的组合。但是不可能写下来,因为代码失败了。

builder.java:13:对此的调用必须是构造函数中的第一条语句
这个(cdr);
^
1个错误

是否可以编写没有任何代码冗余的最后一个构造函数(也可以不调用相同的setter方法)?

最佳答案

通常,参数较少的构造函数应调用参数较多的构造函数。

public Pair() {}
public Pair(String car) { this(car, null); }
public Pair(Integer cdr) { this(null, cdr); }
public Pair(String car, Integer cdr) { this.car = car; this.cdr = cdr; }

10-06 09:33