web-dev-qa-db-fra.com

Initialiser un calendrier dans un constructeur

Si je fais ça:

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

Tout fonctionne comme prévu. Mais si je fais ça:

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

Ça peut être fait. Pour autant que je sache. Nous devons initialiser le calendrier comme ceci:

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

Ce que je veux savoir, c'est s'il est possible d'utiliser Calendar et d'obtenir le même résultat que GregorianCalendar lors de la création et de l'initialisation de l'objet new Estimacao comme ci-dessus.

8
Favolas

Calendar est une classe abstraite, vous ne pouvez donc pas en créer une instance. Lorsque vous appelez getInstance, une nouvelle instance GregorianCalendar est renvoyée. Donc, c'est la même chose que votre premier exemple.

Donc, je suppose que la question est: pourquoi voulez-vous appeler un nouveau calendrier au lieu d'un nouveau calendrier grégorien? Si c’est juste pour que vous puissiez cacher l’implémentation que vous utilisez, je voudrais simplement faire ce que vous avez déjà fait pour initialiser un calendrier. Ou créez une seule méthode qui prend les mêmes paramètres et masque les appels à la classe Calendar, par exemple.

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;
}
19
DaveJohnston

créez votre propre classe personnalisée avec le constructeur approprié et utilisez la classe Java Calendar pour initialiser l'objet de votre propre classe Calendar

0
Pratik