OMG!我終於得到了一個更好,更精英,更優雅的回答,讓Jon Skeet做到了!
一個絕妙的方法是使用一個匿名類,用一個實例塊,像這樣:
public static final Date MY_DATE = new Date() {{
try {
setTime(Util.getDateFromString("20000101").getTime());
} catch (ParseException e) {
throw new RuntimeException(e);
}
}};
這工作,因爲(顯着)java.util.Date
並不是一成不變的!
要使日期不可改變的,因此更容易接受設計明智的,覆蓋setter方法太:
public static final Date MY_DATE = new Date() {{
try {
super.setTime(Util.getDateFromString("20000101").getTime());
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
// Formatted for brevity :)
@Override public void setYear(int year) { throw new UnsupportedOperationException();}
@Override public void setMonth(int month) {throw new UnsupportedOperationException();}
@Override public void setDate(int date) {throw new UnsupportedOperationException();}
@Override public void setHours(int hours) {throw new UnsupportedOperationException();}
@Override public void setMinutes(int minutes) {throw new UnsupportedOperationException();}
@Override public void setSeconds(int seconds) {throw new UnsupportedOperationException();}
@Override public void setTime(long time) {throw new UnsupportedOperationException();}
};
在公共靜態字段中可變是很不理想的 – Dapeng