values - java simple enum example




Quelle est l'utilisation de "enum" en Java? (6)

Cette question a déjà une réponse ici:

J'ai donc regardé dans ce type "enum", et il me semble que c'est un tableau glorifié / ArrayList / List . Quelle est exactement l'utilisation de celui-ci?


1) enum est un mot clé dans la méthode orientée objet.

2) Il est utilisé pour écrire le code dans une seule ligne, c'est pas plus que ça.

     public class NAME
     {
        public static final String THUNNE = "";
        public static final String SHAATA = ""; 
        public static final String THULLU = ""; 
     }

-------This can be replaced by--------

  enum NAME{THUNNE, SHAATA, THULLU}

3) La plupart des développeurs n'utilisent pas de mot clé enum, c'est juste une méthode alternative.


Enum sert de type de nombre fixe de constantes et peut être utilisé au moins pour deux choses

constant

public enum Month {
    JANUARY, FEBRUARY, ...
}

C'est beaucoup mieux que de créer un tas de constantes entières.

créer un singleton

public enum Singleton {
    INSTANCE

   // init
};

Vous pouvez faire des choses assez intéressantes avec des énumérations, regardez here

Regardez aussi la documentation officielle


Les enums langage de programmation Java sont beaucoup plus puissantes que leurs équivalents dans d'autres langages, qui ne sont guère plus que des entiers glorifiés. La nouvelle déclaration enum définit une classe à part entière (doublée d'un type enum). En plus de résoudre tous les problèmes ( Not typesafe, No namespace, Brittleness and Printed values are uninformative ) qui existe avec le suivant Enum pattern qui a été utilisé avant java 5.0:

public static final int SEASON_WINTER = 0;

Il vous permet également d'ajouter des méthodes et des champs arbitraires à un type enum, d'implémenter des interfaces arbitraires, etc. Les types Enum fournissent des implémentations de haute qualité de toutes les méthodes Object. Ils sont Comparable et Serializable , et la forme sérielle est conçue pour résister à des changements arbitraires dans le type enum. Vous pouvez également utiliser Enum dans le cas de switch .

Lisez l'article complet sur Java Enums http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html pour plus de détails.


Un type énuméré est essentiellement un type de données qui vous permet de décrire chaque membre d'un type de manière plus lisible et fiable.

Voici un exemple simple pour expliquer pourquoi:

En supposant que vous écrivez une méthode qui a quelque chose à voir avec les saisons:

Le modèle int enum

D'abord, vous avez déclaré des constantes statiques int pour représenter chaque saison.

public static final int SPRING = 0;
public static final int SUMMER = 1;
public static final int FALL = 2;
public static final int WINTER = 2;

Ensuite, vous avez déclaré une méthode pour imprimer le nom de la saison dans la console.

public void printSeason(int seasonCode) {
    String name = "";
    if (seasonCode == SPRING) {
        name = "Spring";
    }
    else if (seasonCode == SUMMER) {
        name = "Summer";
    }
    else if (seasonCode == FALL) {
        name = "Fall";
    }
    else if (seasonCode == WINTER) {
        name = "Winter";
    }
    System.out.println("It is " + name + " now!");
}

Ainsi, après cela, vous pouvez imprimer un nom de saison comme celui-ci.

printSeason(SPRING);
printSeason(WINTER);

C'est une manière assez commune (mais mauvaise) de faire des choses différentes pour différents types de membres dans une classe. Cependant, étant donné que ces codes impliquent des entiers, vous pouvez également appeler la méthode sans problème.

printSeason(0);
printSeason(1);

ou même comme ça

printSeason(x - y);
printSeason(10000);

Le compilateur ne se plaindra pas car ces appels de méthode sont valides et votre méthode printSeason peut toujours fonctionner.

Mais quelque chose ne va pas ici. Que signifie un code de saison de 10000 ? Que se passe-t-il si x - y donne un nombre négatif? Lorsque votre méthode reçoit une entrée qui n'a aucune signification et qui n'est pas supposée être présente, votre programme n'en sait rien.

Vous pouvez résoudre ce problème, par exemple, en ajoutant une vérification supplémentaire.

...
else if (seasonCode == WINTER) {
    name = "Winter";
}
else {
    throw new IllegalArgumentException();
}
System.out.println(name);

Maintenant, le programme va lancer une RunTimeException lorsque le code de la saison est invalide. Cependant, vous devez toujours décider comment vous allez gérer l'exception.

Au fait, je suis sûr que vous avez remarqué que le code de FALL et WINTER sont tous les deux, n'est-ce pas?

Vous devriez avoir l'idée maintenant. Ce modèle est fragile. Cela vous oblige à écrire des vérifications d'état partout. Si vous faites un jeu, et que vous voulez ajouter une saison supplémentaire dans votre monde imaginaire, ce modèle vous fera passer par toutes les méthodes qui font les choses par saison, et dans la plupart des cas vous en oublierez certaines.

Vous pourriez penser que l'héritage de classe est une bonne idée pour ce cas. Mais nous avons juste besoin d'eux et pas plus.

C'est quand enum entre en jeu.

Utiliser le type enum

En Java, les types enum sont des classes qui exportent une instance pour chaque constante d'énumération via un champ final public statique.

Ici vous pouvez déclarer quatre constantes d'énumération: SPRING, SUMMER, FALL, WINTER . Chacun a son propre name .

public enum Season {
    SPRING("Spring"), SUMMER("Summer"), FALL("Fall"), WINTER("Winter");

    private String name;

    Season(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Maintenant, revenons à la méthode.

public void printSeason(Season season) {
    System.out.println("It is " + season.getName() + " now!");
}

Au lieu d'utiliser int , vous pouvez maintenant utiliser Season comme entrée. Au lieu d'une vérification de condition, vous pouvez dire à Season de vous donner son nom.

C'est comme ça que vous utilisez cette méthode maintenant:

printSeason(Season.SPRING);
printSeason(Season.WINTER);
printSeason(Season.WHATEVER); <-- compile error

Vous obtiendrez une erreur de compilation lorsque vous utilisez une entrée incorrecte, et vous êtes assuré d'obtenir une référence singleton non-nulle de Season tant que le programme compile.

Lorsque nous avons besoin d'une saison supplémentaire, nous ajoutons simplement une autre constante en Season et pas plus.

public enum Season {
    SPRING("Spring"), SUMMER("Summer"), FALL("Fall"), WINTER("Winter"), 
    MYSEASON("My Season");

...

Chaque fois que vous avez besoin d'un ensemble fixe de constantes, enum peut être un bon choix (mais pas toujours). C'est une solution plus lisible, plus fiable et plus puissante.


Vous utilisez une enum au lieu d'une class si la classe doit avoir un nombre d'instances fixe et énumérable.

Exemples:

  • DayOfWeek = 7 instances → enum
  • CardSuit = 4 instances → enum
  • Singleton = 1 instance → enum

  • Product = nombre variable d'instances → class
  • User = nombre variable d'instances → class
  • Date = nombre variable d'instances → class

un Enum est un type sécurisé, donc vous ne pouvez pas attribuer une nouvelle valeur à l'exécution. De plus, vous pouvez l'utiliser dans une instruction switch (comme un int).





enums