0

プログラムでいくつかの日付を維持する必要があり、Calendarオブジェクトの配列の形式でそれを行っています。

他のいくつかのクラスからアクセスするには、別のクラスで宣言し、静的インポートとして配列をインポートする予定です。

では、これらの各オブジェクトに値を設定するにはどうすればよいですか?私はそれらを初期化し、次のように他のクラスからそれらにアクセスすることができます:

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

では、どうすればそれらに値を設定できますか?

試しCalendar.getInstance().set(2012, 11, 10, 16, 30) ましたが、提案なしでエラーが発生します。

それで、

  1. 静的インポートはこれを行うための正しい(または最良の)方法ですか?
  2. どうすれば値を設定できますか?
4

3 に答える 3

4

静的インポートの部分は関係ありませんが、率直に言って、可変オブジェクト(カレンダー)の可変配列の公的にアクセス可能な書き込み可能フィールドがあることはそれほど良いことではありません。より良いアプローチは、 GuavaforとJodaTimeforImmutableList<DateTime>を使用して公開することです。(またはおそらく)とにかく..。ImmutableListDateTimeLocalDateTime

静的初期化ブロックを使用することもできますが、代わりにメソッドを作成するだけです。

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;
}
于 2012-07-28T08:44:00.743 に答える
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()]);
}
于 2012-07-28T09:42:36.370 に答える
0

参考までに、次の値:

Calendar.getInstance()。set(2012、11、10、16、30)

set:によって返される値ですvoid。したがって、初期化することはできません

カレンダーcal=Calendar.getInstance()。set(2012、11、10、16、30)

Jon&Markoのより完全な回答を参照してください。

于 2012-07-28T09:47:24.357 に答える