Zauważyłem, że np. klasa Calendar
jest abstrakcyjna. Aby utworzyć jej obiekt, trzeba skorzystać z metody getInstance()
. Skąd ten zwrócony obiekt pochodzi? Czy jest to obiekt GregorianCalendar
?
Szczerze powiem, że trochę łatwo się w tym pogubić.
To samo z Dictionary
, jest abstrakcyjna a widzę metodę newInstance()
. Po tym dziedziczy Map, które znowu jest abstrakcyjne, po którym Hashmap
lub Hashtable
po Dictionary
.
0
0
Dokumentacja Twoim przyjacielem.http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
2
Calendar.getInstance() wywoluje:
public static Calendar getInstance() {
Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
cal.sharedZone = true;
return cal;
}
co z kolei wywoluje:
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);
}
czyli jak nie jestes z Japoni albo z Tajlandi to otrzymasz instancje GregorianCalendar z powrotem. Dlaczego nie jest to singleton? odpowiedzi lezy jak na dloni.