문제

I 을 유지하기 위해 필요 숫자의 날에 내 프로그램으로 나는 일을 하는 형식의 배열의 일정체입니다.

에서 액세스할 수 있는 여러 가지 다른 클래스,나는 계획을 선언 그것은 별도의 클래스에 가져와 배열로 정적 가져옵니다.

지금 어떻게 설정 값에 대한 각각의 해당 개체?할 수 있어요 초기화에서 액세스할 수 있는 다른 클래스는 다음과 같다:

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

지금 어떻게 설정 값을까요?

Calendar.getInstance().set(2012, 11, 10, 16, 30) 그러나 나는 오류 없이 제안을 합니다.

그래서,

  1. 정적에 가져오는 정확한(또는 최고)방법이 있을까요?
  2. 어떻게 설정 값을까요?
도움이 되었습니까?

해결책

정적 가져오는 부분은 무관하지만 솔직히 그것은 정말 좋은 데 공개적으로 액세스할 수 있는 쓰기 가능한 분야의 변경 가능한 배열의 변경 가능한 객체(일정).더 나은 것을 노출 ImmutableList<DateTime> 를 사용하여 구아바를 위한 ImmutableList시간 JodaDateTime.(거나 가능성 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()]);
}
.

FYI, 그 값 :

calendar.getInstance (). 세트 (2012, 11, 10, 16, 30)

set : void에 의해 반환 된 값입니다. 따라서

를 초기화 할 수 없습니다

Calendar Cal= Calendar.getInstance (). 세트 (2012, 11, 10, 16, 30)

Jon & Marko의 완전한 답변을 참조하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top