Статический импорт объектов из массива календаря (невозможно инициализировать)
Мне нужно сохранить несколько дат в моей программе, и я делаю это в виде массива объектов календаря.
Чтобы получить к нему доступ из нескольких других классов, я планирую объявить его в отдельном классе и импортировать массив как статический импорт.
Теперь, как я могу установить значения для каждого из этих объектов? Я могу инициализировать их и получить к ним доступ из другого класса следующим образом:
public static Calendar[] cal = new Calendar[]{
Calendar.getInstance(),
Calendar.getInstance()};
Теперь, как мне установить значения для них?
Я старался Calendar.getInstance().set(2012, 11, 10, 16, 30)
но я получаю ошибку без предложений.
Так,
- Является ли статический импорт правильным (или лучшим) способом сделать это?
- Как мне установить значения для него?
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.