60 votes

Les énumérations Java sont-elles considérées comme des types primitifs ou de référence?

Si j'ai un objet enum, est-il considéré comme une primitive ou une référence?

63voto

SLaks Points 391154

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);
 

14voto

Alex VI Points 61

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.

0voto

TofuBeer Points 32441

Cet article vous montre essentiellement comment les énumérations sont implémentées et, comme le dit SLaks, ce sont des références.

-1voto

K.M Points 56

Les énumérations en Java sont des objets et ceux-ci définissent également leurs propres méthodes, ordinal (), qui renvoie la représentation int. Donc, contrairement à beaucoup d'autres langues, ce sont des types de référence.

-2voto

K.M Points 56

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X