[JAVA] Pourquoi la méthode get est nécessaire dans la classe Calendar

Je suis nouveau sur Java. Vous n'êtes pas parvenu à une conclusion? Cependant, juste pour mémoire,

introduction

Je me demandais quand j'utilisais la classe Calendar.

N'y a-t-il pas une méthode get?

La classe Calendar a des méthodes getter et setter qui vous permettent de récupérer et d'attribuer des années, des mois, des jours, des jours, etc. Par exemple, si vous souhaitez obtenir l'année en cours

import java.util.*;
class CalendarTest {
	public static void main(String args[])
	{
    	Calendar cld = Calendar.getInstance();
    	System.out.println("Méthode getter YEAR →"+cld.get(cld.YEAR));
    }
}

Cela est possible en utilisant la méthode getter et.

production


Méthode getter YEAR → 2019

Je me suis demandé ici. ** Dois-je appeler cld.YEAR? **Quand. Même si vous regardez la référence API, le niveau de contrôle d'accès du champ YEAR est public, vous pouvez donc l'appeler (s'il n'est pas public, vous ne pouvez pas utiliser lecld.get (cld.YEAR) ci-dessus ). Quoi qu'il en soit, je vais le vérifier.

import java.util.*;
class CalendarTest {
	public static void main(String args[])
	{
    	Calendar cld = Calendar.getInstance();
    	System.out.println("Méthode getter YEAR →"+cld.get(cld.YEAR)+",Champ →"+cld.YEAR);
    }
}

production


Méthode getter YEAR → 2019,Champ → 1

Hmm ,? Il semble que le champ YEAR contienne l'entier 1 au lieu de 2019. Il semble que vous puissiez faire diverses spéculations, mais vérifions diverses choses.

import java.util.*;
class CalendarTest {
	public static void main(String args[])
	{
    	Calendar cld = Calendar.getInstance();
    	for(int i = 2015; i<2020 ;i++){
    		cld.set(Calendar.YEAR,i);
    		System.out.println("YEAR("+i+")méthode getter →"+cld.get(cld.YEAR)+",Champ →"+cld.YEAR);
    	}
    }
}

production


YEAR(2015)méthode getter → 2015,Champ → 1
YEAR(2016)méthode getter → 2016,Champ → 1
YEAR(2017)méthode getter → 2017,Champ → 1
YEAR(2018)méthode getter → 2018,Champ → 1
YEAR(2019)méthode getter → 2019,Champ → 1

Eh bien, il semble que le champ YEAR ait toujours un entier de 1. Ainsi, quand j'ai vérifié les autres champs, j'ai trouvé que le champ MONTH était toujours 2 et le champ DAY_OF_MONTH était toujours 5.

J'ai pensé, j'ai vérifié la référence de l'API, et ... Encore une fois, chaque champ a été déclaré constant comme de type «final». Manque de confirmation,

J'ai jeté un coup d'œil à l'intérieur de la classe Calendar

Pour le moment, j'ai trouvé que je devais utiliser la méthode get comme le suggère le titre. Le champ est-il déclaré comme un nombre constant comme un numéro de série?

Alors, que renvoie la méthode getter à la place du champ? J'ai vérifié l'intérieur de la classe Calendar. Les méthodes getter et setter ressemblaient à ceci.

Calendar.java


class Calendar {
    public int get(int field)
    {
        complete();
        return internalGet(field);
    }

    protected final int internalGet(int field)
    {
        return fields[field];
    }
    
    final void internalSet(int field, int value)
    {
        fields[field] = value;
    }
    
    public void set(int field, int value)
    {
        if (areFieldsSet && !areAllFieldsSet) {
            computeFields();
        }
        internalSet(field, value);
        isTimeSet = false;
        areFieldsSet = false;
        isSet[field] = true;
        stamp[field] = nextStamp++;
        if (nextStamp == Integer.MAX_VALUE) {
            adjustStamp();
        }
    }
}

En ignorant les détails, il existe un champ constant tel que «YEAR» comme indice (index) du tableau appelé «champs», et cela ressemble à attribuer ou à récupérer une valeur à l'élément spécifié par le champ.

Impressions

N'est-il pas normal de mettre une valeur dans chaque champ normalement (comme public int YEAR = 2001)? Je ne pouvais pas me débarrasser de ce sentiment.

Je ne suis pas sûr des avantages des méthodes getter et setter. (Après tout, je ne comprends pas l'encapsulation ou l'orientation des objets.

Cependant, il semble facile de gérer que chacun d'entre eux n'a pas d'éléments séparés, mais est regroupé comme {[année], [mois], [jour], ...} dans un tableau. Je l'ai senti ^^

J'étudie Java, je ne sais pas comment faire, et c'est dur de progresser ...

Recommended Posts

Pourquoi la méthode get est nécessaire dans la classe Calendar
Comment obtenir le nom d'une classe / méthode exécutée en Java
Quelle est la méthode principale en Java?
Quand tu te perds dans le nom de la classe
Pourquoi preventDefault est nécessaire
Obtenez le nom du scénario de test dans la classe de test JUnit
[Java] Obtenez la date 10 jours plus tard avec la classe Calendar
Quelle est la méthode pluck?
Quelle est la méthode d'initialisation?
Obtenir la date sans utiliser la classe Calendar
[Java] Obtenez des informations sur la date 10 jours plus tard en utilisant la milliseconde dans la classe Date
Pourquoi les variables de classe sont-elles nécessaires? [Java]
[Spring Boot] Jusqu'à ce que @Autowired soit exécuté dans la classe de test [JUnit5]
Appelez la super méthode en Java
Erreur lors de la finalisation du membre de la classe Entity utilisé dans SpringWebFlux
Si la méthode HTTP n'est pas spécifiée, le côté navigateur demande avec GET
Lorsque le nom de la classe du bean est dupliqué
Qu'est-ce qu'une classe en langage Java (3 /?)
Obtenez le résultat de POST en Java
Spring Autowired est écrit dans le constructeur
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce qu'une classe en langage Java (2 /?)
Comment obtenir la date avec Java
Obtenez un message d'erreur en utilisant n'importe quelle méthode?
[Java] Comment utiliser la classe Calendar
Trier par plusieurs champs dans la classe
[Java] Obtenez la date avec la classe LocalDateTime
Partie de la classe appelée à partir de la classe testée dans le mémo de méthode JMockit Mock
Nommer et appeler explicitement des méthodes de classe parent dans Ruby
Obtenez le nom de classe et le nom de méthode du contrôleur exécuté par le HandlerInterceptor de Spring Boot
Obtenez le chemin défini dans la classe Controller de Spring Boot sous forme de liste
Méthode de classe
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?
La cause n'est pas visible lors de l'appel de méthodes d'autres classes en java
[Java] Calculer le jour à partir de la date (ne pas utiliser la classe Calendar)
[Rails] La lumière de texte de Bootstrap ne peut pas être héritée par la méthode link_to car la classe n'est pas écrite comme argument dans la méthode.
[Order method] Définit l'ordre des données dans Rails
Comment obtenir les informations d'identification Keycloak dans la classe d'intercepteur
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'ordre des modificateurs de méthode Java est fixe
La version ruby est gérée dans le fichier .rbenv / version
Appel de méthode Java depuis RPG (appel de méthode dans sa propre classe)
Obtenez votre numéro de version dans l'application Android
Le silence d'exception est le pire (pourquoi le programmeur fait taire l'exception?)
[Java] Quelque chose est affiché comme "-0.0" dans la sortie
[Java] Obtenir KFunction à partir de la méthode / du constructeur en Java [Kotlin]
Lorsque le projet n'est pas affiché dans eclipse
Ebean.update () n'est pas exécuté dans le modèle hérité.
Je veux obtenir la valeur en Ruby
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java