¿Las enumeraciones de Java se consideran tipos primitivos o de referencia?

3 minutos de lectura

Si tengo un objeto de enumeración, ¿se considera un primitivo o una referencia?

  • Las enumeraciones son clases absolutamente normales con algunas optimizaciones (para la serialización) + verificación c-tor para el nivel de herencia + matriz compartida adicional (no clonada ()) de enumeraciones declaradas. El método público values() siempre devuelve una nueva copia. Pueden implementar interfaces y qué no 🙂

    – mejorsss

    25 de enero de 2011 a las 16:27


avatar de usuario
SLaks

Es un tipo de referencia. Las primitivas de Java son boolean byte short char int long float double.

Puede obtener el valor de la constante de enumeración llamando ordinal(), que es utilizado por EnumSet y EnumMap iterator y “atraviesa los elementos en su orden natural (el orden en que se declaran las constantes de enumeración)”

Incluso puede agregar sus propios miembros a la clase de enumeración, así:

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

  • +1 Desconocía por completo esta funcionalidad. ¿Podría proporcionar un ejemplo de cómo usar esa operación en acción?

    – CorsiKa

    12 de julio de 2010 a las 19:49

  • enum las instancias no tienen que ser inmutables en realidad. Una enumeración puede tener variables mutables.

    – sepp2k

    12 de julio de 2010 a las 19:50

  • @SLaks: Sea como fuere, sigue siendo inexacto decir “las enumeraciones de Java son instancias de objetos inmutables” solo porque sientes que debería ser.

    – sepp2k

    12 de julio de 2010 a las 20:03

  • @Slaks eso es genial. Eso significa que podría almacenar la operación y simplemente getOperation().eval(getA(),getB()) sin interruptor/carcasa. ¡Me gusta! 🙂

    – CorsiKa

    12 de julio de 2010 a las 20:10

  • Tal vez sea mejor decir que “las enumeraciones de Java son referencias de objetos inmutables”.

    –Jacob Tomaw

    12 de julio de 2010 a las 21:20

La forma en que funcionan las enumeraciones en realidad no es muy diferente de cómo se usaban antes de su introducción con 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
}}

Al crear instancias de los diferentes palos en la carga de clases, se garantiza que estos serán mutuamente excluyentes y el constructor privado garantiza que no se crearán más instancias.

Estos serían comparables a través de == o iguales.

La enumeración de Java 5 funciona más o menos de la misma manera, pero con algunas características necesarias para admitir la serialización, etc.

Espero que este fondo arroje algo más de luz.

Este artículo esencialmente muestra cómo se implementan las enumeraciones y, como dice SLaks, son referencias.

Las enumeraciones son tipos de referencia, ya que pueden tener métodos y también pueden ejecutarse desde la línea de comando, si tienen un método principal.

Consulte el siguiente ejemplo de “Planeta” de Sun/Oracle

http://download.oracle.com/javase/tutorial/java/javaOO/enum.html

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad