2011-12-22 27 views
7

Si hago esto:Java inicializar un calendario en un constructor

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

todo funciona como se como se esperaba. Pero si hago esto:

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

Se puede hacer. Por lo que sé. Tenemos para inicializar el calendario de esta manera:

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

Lo que quiero saber es si es posible utilizar Calendar, y lograr lo mismo que GregorianCalendar, al crear e inicializar el objeto new Estimacao que el anterior.

Saludos,

favolas

+0

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

Respuesta

17

Calendario es una clase abstracta, por lo que no se puede crear una instancia del mismo. Cuando llamas a getInstance, en realidad devuelve una nueva instancia de GregorianCalendar. Entonces es lo mismo que tu primer ejemplo.

Así que supongo que la pregunta es, ¿por qué quieres llamar a un nuevo calendario en lugar de un nuevo calendario Gregorian? Si solo se trata de ocultar la implementación que está utilizando, o bien haría lo que ya hizo para inicializar un Calendario. O cree un único método que tome los mismos parámetros y oculte las llamadas a la clase Calendario, p.

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

El calendario no es abstracto, simplemente no tiene constructores públicos. –

+1

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html consulte la API, creo que encontrará que es abstracta – DaveJohnston

+0

La clase Calendar es una clase abstracta que proporciona métodos para convertir entre un instante específico en el tiempo y un conjunto de campos de calendario, como AÑO, MES, DÍA, MESES, HORAS, etc., y para manipular los campos del calendario, como obtener la fecha de la semana siguiente. – DaveJohnston

0

crear su propia clase personalizada con el constructor y el uso apropiado de la clase java calendario en que para inicializar el objeto de su propia clase calendario

-1

Calendar no tiene constructores públicos, y proporciona el método Calendar.getInstance() como medio de construyendo instancias de la clase. Si necesita parametrizar la construcción de un objeto Calendar, ¿por qué no simplemente escribir un método auxiliar en la clase?

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

Compruebe la API, el calendario es abstracto – DaveJohnston

Cuestiones relacionadas