我需要在我的程序中维护一些日期,我正在以日历对象数组的形式进行维护。
要从其他几个类访问它,我计划在一个单独的类中声明它,并将数组作为静态导入导入。
现在,我如何为每个对象设置值?我可以初始化它们,并从其他类访问它们,如下所示:
public static Calendar[] cal = new Calendar[]{
Calendar.getInstance(),
Calendar.getInstance()};
现在我该如何设置它们的值?
我试过Calendar.getInstance().set(2012, 11, 10, 16, 30)
但是我得到了一个没有任何建议的错误。
所以,
- 静态导入是正确的(或最好的)方法吗
- 如何为其设置值
静态导入部分无关紧要,尽管坦率地说,拥有一个可变对象(日历)的可变数组的可公开访问的可写字段并不是很好。更好的方法是对ImmutableList
使用Guava而对DateTime
使用Joda Time来公开ImmutableList<DateTime>
。(或者可能是LocalDateTime
)无论如何。。。
你可以使用一个静态初始化程序块,但我可能只是写一个方法:
public static Calendar[] cal = createCalendars();
private static Calendar[] createCalendars() {
Calendar[] ret = new Calendar[2];
ret[0] = Calendar.getInstance();
ret[0].set(2012, 11, 10, 16, 30);
ret[1] = Calendar.getInstance();
ret[1].set(...);
return ret;
}
这可能不适合你的口味,但无可否认,这是一种非常简洁的方法:
public static final Calendar[] cal = createCal(
2012, 11, 10, 16, 30,
2012, 11, 11, 16, 30,
2012, 11, 12, 16, 30
);
static Calendar[] createCal(int... fields) {
final List<Calendar> cl = new ArrayList<Calendar>();
for (int i = 0; i < fields.length;) {
final Calendar c = Calendar.getInstance();
c.set(fields[i++], fields[i++], fields[i++], fields[i++], fields[i++]);
cl.add(c);
}
return cl.toArray(new Calendar[cl.size()]);
}
仅供参考,的值
Calendar.getInstance().set(2012,11,10,16,30)
是set
:void
返回的值。所以你不能初始化
Calendar cal=Calendar.getInstance().set(2012,11,10,16,30)
参见Jon&马尔科更完整的答案。