我需要在程序中保留一些日期,并且我是以Calendar对象数组的形式进行的。
要从其他几个类访问它,我打算在一个单独的类中声明它并将该数组作为静态导入导入。
现在我该如何为每个对象设置值?我能够初始化它们并从其他类中访问它们:
public static Calendar[] cal = new Calendar[]{
Calendar.getInstance(),
Calendar.getInstance()};
现在我该如何为它们设置值?
我试过Calendar.getInstance().set(2012, 11, 10, 16, 30)
但我得到一个没有任何建议的错误。
所以,
答案 0 :(得分:4)
静态导入部分是无关紧要的,尽管坦率地说,拥有可变对象(日历)的可变数组的可公开访问的可写字段并不是非常好。更好的方法是使用Guava为ImmutableList<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;
}
答案 1 :(得分:1)
这可能不符合您的口味,但无可否认这是一种非常简洁的方式:
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()]);
}
答案 2 :(得分:0)
仅供参考,价值:
Calendar.getInstance()。set(2012,11,10,16,30)
是set
:void
返回的值。
所以你无法初始化
日历cal = Calendar.getInstance()。set(2012,11,10,16,30)
见Jon&amp; Marko更完整的答案。