静态导入日历对象数组(无法初始化)



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

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

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

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

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

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

所以,

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

静态导入部分无关紧要,尽管坦率地说,拥有一个可变对象(日历)的可变数组的可公开访问的可写字段并不是很好。更好的方法是对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&马尔科更完整的答案。

相关内容

  • 没有找到相关文章

最新更新