2011-12-22 17 views
7

Gdybym to zrobić:Java Inicjalizacja kalendarza w konstruktorze

new Estimacao("Aarão","Affenpinscher","Abóbora",new GregorianCalendar(1999,7,26),0), 

Wszystko działa tak jak oczekiwano. Ale jeśli to zrobię:

new Estimacao("Aarão","Affenpinscher","Abóbora",new Calendar(1999,7,26),0), 

Można to zrobić. O ile mi wiadomo. Musimy zainicjować kalendarz tak:

Calendar date = Calendar.getInstance(); 
date.set(Calendar.YEAR, 1999); 
date.set(Calendar.MONTH, 7); 
date.set(Calendar.DAY_OF_MONTH, 26); 

Rzecz Chcę wiedzieć, czy jest to możliwe do wykorzystania Calendar i osiągnąć taki sam jak GregorianCalendar podczas tworzenia i inicjowania obiektu new Estimacao jak wyżej.

Pozdrawiam,

favolas

+0

http://joda-time.sourceforge.net/ – NimChimpsky

Odpowiedz

17

Kalendarz jest klasą abstrakcyjną, więc nie można utworzyć instancję niego. Kiedy wywołujemy getInstance, to zwraca on nową instancję GregorianCalendar. Jest więc taki sam jak pierwszy przykład.

Sądzę więc, że pytanie brzmi: dlaczego chcesz wywołać nowy kalendarz zamiast nowego kalendarza gregoriańskiego? Jeśli jest tak, że możesz ukryć implementację, której używasz, powinienem zrobić to, co już zrobiłeś, aby zainicjować kalendarz. Lub utwórz pojedynczą metodę, która przyjmuje te same parametry i ukrywa połączenia z klasą kalendarza, np.

public Calendar getCalendar(int day, int month, int year) { 
    Calendar date = Calendar.getInstance(); 
    date.set(Calendar.YEAR, year); 

    // We will have to increment the month field by 1 

    date.set(Calendar.MONTH, month+1); 

    // As the month indexing starts with 0 

    date.set(Calendar.DAY_OF_MONTH, day); 

    return date; 
} 
+1

Kalendarz nie jest abstrakcyjny, nie ma żadnych publicznych Konstruktorów. –

+1

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html sprawdź interfejs API, uważam, że jest on abstrakcyjny – DaveJohnston

+0

Klasa Kalendarz jest klasą abstrakcyjną, która zapewnia metody do konwersji między określoną chwilą w czasie a zbiorem pól kalendarza, takich jak ROK, MIESIĄC, DAY_OF_MONTH, GODZINA i tak dalej, oraz do manipulowania polami kalendarza, takimi jak pobranie daty następnego tygodnia. – DaveJohnston

0

utworzyć własną niestandardową klasę z odpowiedniego konstruktora i użyć klasy java kalendarzowego, w tym, by zainicjować obiektu własną klasę kalendarz

-1

Calendar nie ma konstruktorów publicznych oraz zapewnia metodę Calendar.getInstance() jako środek konstruowanie instancji klasy. Jeśli chcesz sparametryzować konstrukcję obiektu Calendar, dlaczego nie napisać po prostu na komputerze klasy pomocniczej?

new Estimacao("Aarão","Affenpinscher","Abóbora", this.getCalendar(1999,7,26),0); 

/* ...elided...other code in here */ 

private Calendar getCalendar(int year, int month, int day) { 
    Calendar c = Calendar.getInstance() 
    c.set(Calendar.YEAR, year); 
    c.set(Calendar.MONTH, month); 
    c.set(Calendar.DAY_OF_MONTH, day); 
    return c; 
} 
+0

Sprawdź API, Kalendarz jest abstrakcyjny – DaveJohnston