静态导入一个Calendar对象数组(无法初始化)

时间:2012-07-28 08:38:39

标签: java arrays import calendar static-import

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

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

现在我该如何为每个对象设置值?我能够初始化它们并从其他类中访问它们:

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

现在我该如何为它们设置值?

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

所以,

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

3 个答案:

答案 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)

setvoid返回的值。 所以你无法初始化

  

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

见Jon&amp; Marko更完整的答案。