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