Calenderは単一の例ではありません
詳細
私たちがCalenderを使った時、Calendarを使ったことがあります.getInstance()は日付クラスのオブジェクトを取得します.この方法は単例の取得方法と同じですが、単例ではないでしょうか.単例であれば、あるオブジェクトが内容を変更した後、別のスレッドのデータは間もなく乱れていますか.実験およびソースコードから,Calendarは一例ではないことが分かる.
テスト:
2つのインスタンスの値は等しいが、参照は等しくないことがわかります.
jdkのソースコードの書き方を見てみましょう.
異なる言語環境によって、異なる日付オブジェクトインスタンスが作成され、低バージョンのJDKでは、タイ語のみが特殊に存在し、高バージョンでは日本のものが追加され、具体的な実装がどのように異なるか、具体的な異なる日付クラスの実装を見ることができます.
CalendarはなぜCalendarを使うのかgetInstance()は、インスタンスオブジェクトを取得するために使用されます.これは、それ自体が抽象クラスであり、様々な日付クラス実装クラスの親であり、Calendarが提供されているためです.getInstance()は呼び出しが便利で、言語環境によって異なる実装を採用し、JDKはこれらの詳細をカプセル化してくれるので、直接使用します.
日付クラスのインスタンスを作成するには、実際には可能ですが、パッケージ性、多態性を破壊するに違いありません.getInstance()メソッドで処理されるように、言語環境によって異なる処理をしなければなりません.だから、破壊しないほうがいいです.
私たちがCalenderを使った時、Calendarを使ったことがあります.getInstance()は日付クラスのオブジェクトを取得します.この方法は単例の取得方法と同じですが、単例ではないでしょうか.単例であれば、あるオブジェクトが内容を変更した後、別のスレッドのデータは間もなく乱れていますか.実験およびソースコードから,Calendarは一例ではないことが分かる.
テスト:
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
// true
System.out.println("c1.equals(c2) is : "+c1.equals(c2));
// false
System.out.println("c1 == c2 is : "+ (c1 == c2));
2つのインスタンスの値は等しいが、参照は等しくないことがわかります.
jdkのソースコードの書き方を見てみましょう.
public static Calendar getInstance()
{
Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
cal.sharedZone = true;
return cal;
}
private static Calendar createCalendar(TimeZone zone,
Locale aLocale)
{
// If the specified locale is a Thai locale, returns a BuddhistCalendar
// instance.
//
if ("th".equals(aLocale.getLanguage())
&& ("TH".equals(aLocale.getCountry()))) {
return new sun.util.BuddhistCalendar(zone, aLocale);
//
} else if ("JP".equals(aLocale.getVariant())
&& "JP".equals(aLocale.getCountry())
&& "ja".equals(aLocale.getLanguage())) {
return new JapaneseImperialCalendar(zone, aLocale);
}
// else create the default calendar
//
return new GregorianCalendar(zone, aLocale);
}
異なる言語環境によって、異なる日付オブジェクトインスタンスが作成され、低バージョンのJDKでは、タイ語のみが特殊に存在し、高バージョンでは日本のものが追加され、具体的な実装がどのように異なるか、具体的な異なる日付クラスの実装を見ることができます.
CalendarはなぜCalendarを使うのかgetInstance()は、インスタンスオブジェクトを取得するために使用されます.これは、それ自体が抽象クラスであり、様々な日付クラス実装クラスの親であり、Calendarが提供されているためです.getInstance()は呼び出しが便利で、言語環境によって異なる実装を採用し、JDKはこれらの詳細をカプセル化してくれるので、直接使用します.
GregorianCalendar c1 = new GregorianCalendar();
日付クラスのインスタンスを作成するには、実際には可能ですが、パッケージ性、多態性を破壊するに違いありません.getInstance()メソッドで処理されるように、言語環境によって異なる処理をしなければなりません.だから、破壊しないほうがいいです.