簡體   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