[英]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.