考虑一个从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
实施此方法的正确方法是什么?
答案 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]));
}
//...
}