Si j'ai un objet enum, est-il considéré comme une primitive ou une référence?
Réponses
Trop de publicités?C'est un type de référence.
Contrairement à de nombreux langages, dans lesquels enum
est un ensemble de constantes intégrales, les énumérations Java sont des instances d'objet immuables. Vous pouvez obtenir la valeur numérique d'une instance enum en appelant ordinal()
.
Vous pouvez même ajouter vos propres membres à la classe enum, comme ceci:
public enum Operation {
PLUS { double eval(double x, double y) { return x + y; } },
MINUS { double eval(double x, double y) { return x - y; } },
TIMES { double eval(double x, double y) { return x * y; } },
DIVIDE { double eval(double x, double y) { return x / y; } };
// Do arithmetic op represented by this constant
abstract double eval(double x, double y);
}
//Elsewhere:
Operation op = Operation.PLUS;
double two = op.eval(1, 1);
La façon dont les énumérations de travail est en fait pas trop différent de la façon dont ils ont été utilisés avant leur introduction à Java 5:
public final class Suit {
public static final Suit CLUBS = new Suit();
public static final Suit DIAMONDS = new Suit();
public static final Suit HEARTS = new Suit();
public static final Suit SPADES = new Suit();
/**
* Prevent external instantiation.
*/
private Suit() {
// No implementation
}}
En instanciant les différentes couleurs sur la classe de chargement il est assuré que les deux parties sont mutuellement exclusifs et le constructeur privé veille à ce qu'aucun d'autres instances seront créées.
Celles-ci seraient comparables, soit par le biais d' == ou égal.
Le Java 5 enum fonctionne presque de la même manière, mais avec quelques fonctionnalités nécessaires à l'appui de la sérialisation etc.
J'espère que ce de fond jette un peu plus de lumière.
Cet article vous montre essentiellement comment les énumérations sont implémentées et, comme le dit SLaks, ce sont des références.
Les énumérations sont des types de référence, en ce sens qu'elles peuvent avoir des méthodes et peuvent également être exécutées à partir de la ligne de commande, si elles ont la méthode principale.
Voir l'exemple "Planet" suivant de Sun / Oracle
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html