Si tengo un objeto enum, ¿se lo considera una primitiva o una referencia?¿Las enumeraciones de Java se consideran primitivas o de referencia?
Respuesta
Es un tipo de referencia.
A diferencia de muchos idiomas, en los que enum
es un conjunto de constantes integrales, las enumeraciones de Java son instancias de objetos inmutables. Puede obtener el valor numérico de una instancia enum llamando al ordinal()
.
Usted puede incluso añadir sus propios miembros de 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);
This article que muestra esencialmente cómo se implementan las enumeraciones, y como dice SLaks, que son referencias.
La forma de trabajar de las enumeraciones en realidad no es muy diferente de la forma en que se utilizaron 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
}}
creando instancias de los diferentes palos en la carga de clases, se asegura 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 la misma manera, pero con algunas características necesarias para apoyar la serialización etc.
espero que este fondo arroja algo más de luz.
Los enumeraciones son tipos de referencia, ya que pueden tener métodos y también se pueden ejecutar desde la línea de comandos, si tienen el método principal.
Ver siguiente ejemplo "Planeta" de Sun/Oracle
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
- 1. ¿Por qué las enumeraciones se consideran tipos compuestos?
- 2. ¿Cómo se implementan las enumeraciones en Java?
- 3. ¿Las clases derivadas se consideran amigos?
- 4. ¿Qué operaciones en Java se consideran atómicas?
- 5. ¿Las primitivas de Java van en la pila o en el montón?
- 6. Asignaciones y primitivas de Java
- 7. ¿Por qué las enumeraciones de Java no son clonables?
- 8. Java: ¿Sincronización en primitivas?
- 9. ¿Las dependencias circulares se consideran un mal diseño?
- 10. Comprender enumeraciones en Java
- 11. ¿Hay alguna forma de hacer bitwise-O enumeraciones en Java?
- 12. ¿Comparar dos matrices de primitivas en Java?
- 13. Qué características C99 se consideran dañinas o no compatibles
- 14. valores de las enumeraciones de Java con los genéricos
- 15. ¿Cómo se ignoran las declaraciones de estructura y se consideran solo las definiciones en cscope?
- 16. (Un) matrices primitivas de boxeo en Java
- 17. ¿Cómo accedo a las enumeraciones de Java desde Scala?
- 18. tienda una ordenación de las enumeraciones en Java
- 19. ¿Por qué las variables globales se consideran malas prácticas?
- 20. Enumeraciones de Java - Cambie las declaraciones frente al patrón de visitante en las Enumeraciones - ¿Beneficios de rendimiento?
- 21. La implementación toString en las enumeraciones de Java
- 22. Java: enumeraciones anónimas?
- 23. Hibernate Validación de las colecciones de primitivas
- 24. ¿Por qué las enumeraciones no se pueden modificar?
- 25. java: matrices primitivas: ¿están inicializadas?
- 26. Java: conversión de tipo dinámico utilizando las enumeraciones
- 27. ¿Se consideran iframes 'mala práctica'?
- 28. no puede compilar las enumeraciones en Eclipse
- 29. Comprensión de las enumeraciones scala
- 30. C# enumeraciones Públicas de las clases
enumeraciones son clases absolutamente normales w/algunas optimizaciones (por serialización) + cheque c-tor para el nivel de la herencia + matriz extra compartido (no clonados()) de enums declarados. Los valores de método público() siempre devuelven una nueva copia. Pueden implementar interfaces y lo que no :) – bestsss