2016-09-04 6 views
0

JavaのCalendarクラスには、DATEなどの静的データフィールドがあるため、静的フィールドが変更されたときに他のオブジェクトが変更されません。 私は2つの異なるグレゴリオ暦を作成し、静的データフィールドが1つではなくすべてのオブジェクトの値を変更したと考えました。Javaカレンダークラスのその他のオブジェクトに影響しない静的変数

import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class TEST { 
    public static void main(String[] args) { 

     GregorianCalendar cal = new GregorianCalendar(); 

     System.out.println(cal.get(Calendar.DATE)); 

     GregorianCalendar cal2 = new GregorianCalendar(); 

     cal2.set(Calendar.DATE, 12); 

     System.out.println(cal2.get(Calendar.DATE)); 
     System.out.println(cal.get(Calendar.DATE)); 

    } 
} 
+1

「Calender.DATE」も「最終」であり、変更することはできません。 'cal2'の日付を変更すべきであることを' set'に示すために使われます。 –

+0

あなたの質問とそのタイトルを書くのにもっと気を配り、努力してください。タイトルは、手元にある中心的な問題を狭義に説明する必要があります。また、 'set'を渡して' 45'を呼び出すことで何をしようとしていますか? –

+0

私はちょうどアカウントを作って、それについて申し訳ありません質問の問題全体に慣れています。実際には何も考えずに乱数を投げただけで、カレンダーの日付を別のものに設定したかったのです。 @BasilBourque – Oswald

答えて

2

Calendar.DATEそれはあなたが特定のCalendarインスタンスで取得/設定する値のタイプを参照するために使われている静的変数だ、静的フィールドではありません。

あなたはactual source code of java.util.Calendarを見れば、あなたはそれが

Calendar.DATEは5番目の要素を参照するだけで良い方法であるすべての値、すなわち日、月、年などを保持している内部int配列を持っていることがわかりますその配列の


Java 8ソースコード内のメンバーの宣言。

/** 
* Field number for <code>get</code> and <code>set</code> indicating the 
* day of the month. This is a synonym for <code>DAY_OF_MONTH</code>. 
* The first day of the month has value 1. 
* 
* @see #DAY_OF_MONTH 
*/ 
public final static int DATE = 5; 
0

rorschachによる回答は正しいので、受け入れてください。

また、設計が難しく、混乱し厄介であることが判明している古い日時クラスを使用しています。それらを避けてください。それらはjava.timeクラスに取って代わられています。

LocalDate today = LocalDate.now(ZoneId.of("America/Montreal")); 
LocalDate nextWeek = today.plusWeeks(1); 
LocalDate midMonth = today.withDayOfMonth(15); 
LocalDate firstOfMonth = today.with(TemporalAdjusters.firstDayOfMonth()); 
LocalDate secondTuesdayOfThisMonth = today.with(TemporalAdjusters.dayOfWeekInMonth(2 , DayOfWeek.TUESDAY)); 
関連する問題