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