Ada*_*tan 4 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;
}
Run Code Online (Sandbox Code Playgroud)
在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]));
}
//...
}
Run Code Online (Sandbox Code Playgroud)
用法:
MyClass my = MyClass.fromCsvLine("...");
Run Code Online (Sandbox Code Playgroud)
创建一个方法
private init(String name, String address, Integer age) {}
Run Code Online (Sandbox Code Playgroud)
从两个构造函数中调用它.
我不会混合代表解析内容的类和内容解析类.我会创建一个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]));
}
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |