2011-12-22 18 views
7

Se faccio questo:Java inizializzare un calendario in un costruttore

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

Tutto funziona come come previsto. Ma se faccio questo:

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

Si può fare. Per quanto ne so. Dobbiamo per inizializzare il calendario in questo modo:

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

La cosa che voglio sapere è se è possibile utilizzare Calendar, e raggiungere la stessa di GregorianCalendar, durante la creazione e l'inizializzazione dell'oggetto new Estimacao come sopra.

saluti,

favolas

+0

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

risposta

17

Calendar è una classe astratta, quindi non è possibile creare un'istanza di esso. Quando chiami getInstance restituisce effettivamente una nuova istanza di GregorianCalendar. Quindi è lo stesso del tuo primo esempio.

Quindi immagino che la domanda sia, perché vuoi chiamare il nuovo calendario invece del nuovo GregorianCalendar? Se è solo in modo che tu possa nascondere l'implementazione che stai usando, farei semplicemente ciò che hai già fatto per inizializzare un calendario. Oppure crea un singolo metodo che prende gli stessi parametri e nasconde le chiamate alla classe Calendar, ad es.

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

calendario non è astratta, non ha proprio nessun Costruttori pubblici. –

+1

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html controlla l'API, penso che troverai che è astratto – DaveJohnston

+0

La classe Calendar è una classe astratta che fornisce metodi per la conversione tra uno specifico istante di tempo e un insieme di campi del calendario quali ANNO, MESE, DAY_OF_MONTH, HOUR e così via e per manipolare i campi del calendario, ad esempio ottenere la data della settimana successiva. – DaveJohnston

0

creare una classe personalizzata con il costruttore appropriato e utilizzare la classe del calendario di Java in quanto per inizializzare l'oggetto la propria classe di calendario

-1

Calendar non ci sono costruttori pubblici, e fornisce il metodo Calendar.getInstance() come mezzo di costruzione di istanze della classe. Se è necessario parametrizzare la costruzione di un oggetto Calendar, perché non scrivere semplicemente un metodo di supporto sulla classe?

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

Controlla l'API, il calendario è astratto – DaveJohnston

Problemi correlati