簡體   English   中英

構造函數重載

[英]Constructor overload

這是我的課:

public class DateTime {

private int hours;
private int minutes;
private int seconds;
private int day;
private int month;
private int year;



public DateTime(int hours, int minutes, int seconds) {


    Calendar c = Calendar.getInstance();
    int day = c.get(Calendar.DAY_OF_MONTH);
    int month = c.get(Calendar.MONTH);
    int year = c.get(Calendar.YEAR);

    this(hours,minutes,seconds,day,month,year); //Error: call to this must be first statement in constructor java

}


public DateTime(int hours, int minutes, int seconds, int day, int month, int year) {

    this.hours = hours;
    this.minutes = minutes;
    this.seconds = seconds;
    this.day = day;
    this.month = month;
    this.year = year;
}
}

我想用這種邏輯重載構造函數,
但是我得到了錯誤:
“對此的調用必須是構造函數java中的第一條語句”
你能建議一個解決方案嗎?

因為“ this()”應該是構造函數要調用的第一個。 然后只有解決方案。 您可以這樣使用:

public class DateTime {

private int hours;
private int minutes;
private int seconds;
private int day;
private int month;
private int year;



public DateTime(int hours, int minutes, int seconds) {

Calendar c = Calendar.getInstance();
this.day = c.get(Calendar.DAY_OF_MONTH);
this.month = c.get(Calendar.MONTH);
this.year = c.get(Calendar.YEAR);
this.hours = hours;
this.minutes = minutes;
this.seconds = seconds;

}
}

現在我認為這會很好。

有幾種解決方案...

0)內聯構造函數調用並直接設置小時分鍾和秒,這是不值得的麻煩

1)使用中介構造函數

public DateTime(int hours, int minutes, int seconds) {
    this(hours, minutes, seconds, Calendar.getInstance());
}
private DateTime(int hours, int minutes, int seconds, Calendar c) {
    this(hours,minutes,seconds,c.get(Calendar.DAY_OF_MONTH),c.get(Calendar.MONTH),c.get(Calendar.YEAR));
}

2)使用工廠方法代替構造函數

public static DateTime newDateTime(int hours, int minutes, int seconds) {
    Calendar c = Calendar.getInstance();
    int day = c.get(Calendar.DAY_OF_MONTH);
    int month = c.get(Calendar.MONTH);
    int year = c.get(Calendar.YEAR);
    return new DateTime(hours,minutes,seconds,day,month,year);
}

3)倒置依賴關系(每年的月份月份設置兩次)

public DateTime(int hours, int minutes, int seconds, int day, int month, int year) {
    this(hours, minutes, seconds);
    this.day = day;
    this.month = month;
    this.year = year;
}

4)委托給方法而不是構造函數

public DateTime(int hours, int minutes, int seconds) {
    Calendar c = Calendar.getInstance();
    int day = c.get(Calendar.DAY_OF_MONTH);
    int month = c.get(Calendar.MONTH);
    int year = c.get(Calendar.YEAR);
    set(hours,minutes,seconds,day,month,year);
}
public DateTime(int hours, int minutes, int seconds, int day, int month, int year) {
    set(hours,minutes,seconds,day,month,year);
}
private final void set(int hours, int minutes, int seconds, int day, int month, int year) { ... }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM