繁体   English   中英

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

[英]Java: Overloading constructors which call each other

考虑一个从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中,这会失败,因为:

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

实现这个的正确方法是什么?

这是我的看法:

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("...");

创建一个方法

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

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

我不会混合代表解析内容的类和内容解析类。 我会创建一个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]));
    }

    //...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM