Java:重载相互调用的构造函数

时间:2012-03-05 12:41:03

标签: java constructor overloading

考虑一个从CSV行中找到的数据实例化的类,并存储它的一些字段。为这个类创建两个构造函数是有意义的 - 一个来自原始CSV行,另一个带有显式变量赋值。

如,

public MyClass(String csvLine)
{
    String[] fields = StringUtils.split(csvLine, ',');
    this(fields[3], fields[15], Integer.parseInt([fields[8]));
}

public MyClass(String name, String address, Integer age)
{
    this.name=name;
    this.address=address;
    this.age=age;
}

在Java中,这失败是因为:

  

构造函数调用必须是a中的第一个语句   构造函数WhereOnEarth.java

实施此方法的正确方法是什么?

3 个答案:

答案 0 :(得分:7)

这是我的看法:

public class MyClass {

    public static MyClass fromCsvLine(String csvLine) {
        String[] fields = StringUtils.split(csvLine, ',');
        return new MyClass(fields[3], fields[15], Integer.parseInt([fields[8]));
    }

    //...

}

用法:

MyClass my = MyClass.fromCsvLine("...");

答案 1 :(得分:5)

创建方法

private init(String name, String address, Integer age) {}

从两个构造函数中调用它。

答案 2 :(得分:5)

我不会混合代表解析内容的类和内容解析类。我会创建一个MayClassFactory或类似的东西:

public class MyClassFactory {

    public MyClass fromCsvLine(String csvLine) {
        String[] fields = StringUtils.split(csvLine, ',');
        return new MyClass(fields[3], fields[15], Integer.parseInt([fields[8]));
    }

    //...
}