# GregorianCalendar.getInstance()



## Samurider (11. Dez 2003)

Hallo,

Kann mir jmd. erklären, ob folgendes Sinn macht,
und warum man so etwas machen sollte?

```
Calendar cal = GregorianCalendar.getInstance();
```

Wird damit etwas vorinitialisiert, oder macht so eine Anweisung überhaupt keine Sinn?


----------



## bygones (11. Dez 2003)

es macht natürlich sinn. Die Klasse ist als Singelton implementiert, d.h. man kann nur eine instanz der Klasse erzeugen - und die holst du dir mit getInstance().

Codemäßig heißt das, dass der Konstruktor private ist und die Klasse eine statische variable von sich selbst beinhaltet. Wenn du getInstance() aufrufst, wird getestet, ob die Variable noch null ist, wenn ja wird sie initialisiert. Dann bekommst du die Variable zurück....

Hat versch. Sinn - meines Wissens allen voran einen Sicherheitsaspekt, aber meiner Ansicht nach einen logischen. Damit erzwingst du einfach, dass nur eine Instanz von einer Klasse erzeugen werden kann.....


----------



## mariopetr (11. Dez 2003)

deathbyaclown hat gesagt.:
			
		

> es macht natürlich sinn. Die Klasse ist als Singelton implementiert, d.h. man kann nur eine instanz der Klasse erzeugen - und die holst du dir mit getInstance().



das ist absoluter unsinn.



			
				deathbyaclown hat gesagt.:
			
		

> Codemäßig heißt das, dass der Konstruktor private ist und die Klasse eine statische variable von sich selbst beinhaltet. Wenn du getInstance() aufrufst, wird getestet, ob die Variable noch null ist, wenn ja wird sie initialisiert. Dann bekommst du die Variable zurück....



und es wird immer schlimmer. getInstance() wird statisch in Calendar implementiert und gibt eine konkrete instance einer ableitung von Calendar (meist Gregorian, bei den asiaten kann das aberschon ganz anders aussehen).

aus der apidoc:
"Like other locale-sensitive classes, Calendar provides a class method, getInstance, for getting a generally useful object of this type. Calendar's getInstance method returns a Calendar object whose time fields have been initialized with the current date and time: 
 Calendar rightNow = Calendar.getInstance();
A Calendar object can produce all the time field values needed to implement the date-time formatting for a particular language and calendar style (for example, Japanese-Gregorian, Japanese-Traditional). Calendar defines the range of values returned by certain fields, as well as their meaning. For example, the first month of the year has value MONTH == JANUARY for all calendars. Other values are defined by the concrete subclass, such as ERA and YEAR. See individual field documentation and subclass documentation for details. "

ps: vieleicht sollte man garnicht antworten, ehe man solchen mist verbreitet


----------



## bygones (11. Dez 2003)

@mariopetr:

vielen Dank für den netten Kommentar - wenn ich meine eine Antwort zu wissen dann schreib ich sie - ich habe die Weisheit nicht gepachtet und behaupte dies auch nicht.

*kopfschütteln*

schnuffie hat recht - arroganz


----------



## Samurider (12. Dez 2003)

Ok, danke dafür.
Wenn ich es also richtig verstehe, bekomme ich eine instance vom Typ Calendar, die mit Inhalten vorinitialisiert ist. 
Wie die Daten gesetzt sind entscheidet die abgeleitete Klasse, die ich benutze -- in meinem Fall der GregorianCalendar.


----------



## mariopetr (12. Dez 2003)

nicht ganz. Calendar.getInstance() retourniert eine instance vom type [irgendwas]. irgendwas ist dabei eine von Calendar abgelittene kalsse. welche zu den systemlocales apsst und mit aktuellen werten vorinitialisiert ist. sinn und zweck ist es, das du in deinem programm Calendar benutzt, ohne zu wissen welche konkrete implementation dahinterliegt. dann ist es naemlich wurst, ob dein programm in d, china, israel oder so laeuft.


----------



## Samurider (12. Dez 2003)

GregorianCalendar.getInstance() liefert mir ein vorinitialisiertes Object vom Typ GregCal.
Dann ist mir nicht klar, warum ich dieses Object danach wieder in einer Variable vom Typ Calendar speichere.

"GregorianCalendar cal = GregorianCalendar.getInstance();"
macht mehr Sinn als
"Calendar cal = GregorianCalendar.getInstance();"

Ich glaube, ich raffe es nicht. Vielleicht sollte ich mir ein paar Tutorials durchlesen um dahinter zu kommen.


----------



## mariopetr (12. Dez 2003)

fuere den selben code mal auf nem asiatischen pc aus, dann bekommst du keinen gregoriancalendar. auf nem normal europaeischem oder us sys wirst du wohl immer gregorian bekommen


----------

