0

我需要在我的程序中维护一些日期,并且我以 Calendar 对象数组的形式进行。

为了从其他几个类访问它,我计划在一个单独的类中声明它并将数组作为静态导入导入。

现在如何为每个对象设置值?我可以像这样初始化它们并从其他类访问它们:

public static Calendar[] cal = new Calendar[]{
                                    Calendar.getInstance(),
                                    Calendar.getInstance()};

现在如何为它们设置值?

我试过Calendar.getInstance().set(2012, 11, 10, 16, 30) 了,但我得到一个没有建议的错误。

所以,

  1. 静态导入是正确(或最佳)的方法吗?
  2. 如何为其设置值?
4

3 回答 3

4

静态导入部分是无关紧要的,尽管坦率地说,拥有可变对象(日历)的可变数组的可公开访问的可写字段并不是非常好。更好的方法是公开ImmutableList<DateTime>使用 Guava forImmutableListJoda Time for 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;
}
于 2012-07-28T08:44:00.743 回答
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()]);
}
于 2012-07-28T09:42:36.370 回答
0

仅供参考,价值:

Calendar.getInstance().set(2012, 11, 10, 16, 30)

是返回的值set: void。所以不能初始化

日历 cal = Calendar.getInstance().set(2012, 11, 10, 16, 30)

请参阅 Jon & Marko 的更完整答案。

于 2012-07-28T09:47:24.357 回答