質問

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

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

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

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

では、値を設定するにはどうすればよいでしょうか?

私は試した Calendar.getInstance().set(2012, 11, 10, 16, 30)しかし、提案がないエラーが表示されます。

それで、

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

解決

静的インポート部分は無関係ですが、率直に言って、変更可能なオブジェクト (カレンダー) の変更可能な配列のパブリックにアクセス可能な書き込み可能なフィールドを持つことはあまり良いことではありません。より良いアプローチは、 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()]);
}
.

ただのFYI、の値:

calendar.getInstance()セット(2012,11,10,16,30)

は、setvoidによって返される値です。 だからあなたは

を初期化することはできません

カレンダーCAL= calendar.getInstance()。セット(2012,11,10,16,30)

Jon&Markoのより完全な答えを見てください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top