Статический импорт объектов из массива календаря (невозможно инициализировать)

Мне нужно сохранить несколько дат в моей программе, и я делаю это в виде массива объектов календаря.

Чтобы получить к нему доступ из нескольких других классов, я планирую объявить его в отдельном классе и импортировать массив как статический импорт.

Теперь, как я могу установить значения для каждого из этих объектов? Я могу инициализировать их и получить к ним доступ из другого класса следующим образом:

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

Теперь, как мне установить значения для них?

Я старался Calendar.getInstance().set(2012, 11, 10, 16, 30)но я получаю ошибку без предложений.

Так,

  1. Является ли статический импорт правильным (или лучшим) способом сделать это?
  2. Как мне установить значения для него?

3 ответа

Решение

Часть статического импорта не имеет значения, хотя, честно говоря, не очень приятно иметь публично доступное для записи поле изменяемого массива изменяемых объектов (календарей). Лучшим подходом было бы выставить ImmutableList<DateTime> используя гуаву для 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, Так что вы не можете инициализировать

Календарь cal = Calendar.getInstance(). Set(2012, 11, 10, 16, 30)

Смотрите более полные ответы Jon & Marko.

Другие вопросы по тегам