Si j'ai un objet enum, est-ce considéré comme une primitive ou une référence?Les énumérations Java sont-elles considérées comme des types primitifs ou de référence?
Répondre
C'est un type de référence.
Contrairement à de nombreux langages dans lesquels un 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);
+1 Je n'étais absolument pas au courant de cette fonctionnalité. Pourriez-vous donner un exemple de la façon d'utiliser cette opération en action? – corsiKa
Les instances 'enum' ne doivent pas nécessairement être immuables. Une énumération peut avoir des variables mutables. – sepp2k
@glowcoder: 'Operation.PLUS.eval (1, 1)' – SLaks
This article vous montre essentiellement la façon dont les énumérations sont mises en œuvre, et comme le dit SLaks, ils sont des références.
La façon dont énumérations travail est en fait pas trop différent de la façon dont ils ont été utilisés avant leur introduction avec 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 instancier les différentes combinaisons sur le chargement des classes, il est assuré que ceux-ci seront mutuellement exclusifs et le constructeur privé s'assure qu'aucune autre instance ne sera créée.
Ceux-ci seraient comparables soit par = = soit égal à.
ENUM Java 5 fonctionne à peu près de la même façon, mais avec quelques fonctionnalités nécessaires pour soutenir sérialisation etc.
J'espère que ce fond jette un peu plus de lumière.
Les énumérations sont des types de référence, en ce sens qu'elles peuvent avoir des méthodes et peuvent être exécutées à partir de la ligne de commande, si elles ont la méthode principale.
Voir ci-dessous "Planet" exemple de Sun/Oracle
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
- 1. Comment faites-vous référence aux types Java primitifs dans Clojure?
- 2. Utilisation des propriétés pour les types primitifs
- 3. Les membres d'entité doivent-ils être des types de données primitifs ou des types de données Java?
- 4. Types Jaxb2Marshaller et primitifs
- 5. JNI nouveaux types primitifs
- 6. Obtenir la valeur par défaut pour les types primitifs Java
- 7. Liste de fait des types primitifs utilisables en C++
- 8. StructureMap Liste des types non primitifs
- 9. bulldozer convertisseurs personnalisés pour les types primitifs
- 10. Unity IoC et l'enregistrement des types primitifs
- 11. Les classes dérivées sont-elles considérées comme des amis?
- 12. avancée énumérations Java comme dans Ruby
- 13. ArrayList de types primitifs dans Hibernate
- 14. Types primitifs et conteneurs IoC
- 15. Les déclarations DefType sont-elles considérées comme de mauvaises pratiques?
- 16. Les types de données primitifs dans PHP sont-ils transmis par référence?
- 17. analyse des types primitifs à l'aide de java.util.Scanner
- 18. Astuce de codage - types d'intersection et énumérations java
- 19. Boost :: Types aléatoires et énumérations
- 20. Comment les méthodes d'objet toString(), ==, equals() fonctionnent-elles différemment ou de manière similaire sur les types de référence et les types primitifs?
- 21. encapsuler des énumérations ou non?
- 22. Valeur de réglage de l'instance des types primitifs
- 23. NSArray, les types primitifs et la boxe Oh My!
- 24. Débogueur Xcode: Afficher l'adresse mémoire pour les types primitifs?
- 25. Rails ActiveRecord et tableau de types primitifs
- 26. Les types primitifs sont-ils collectés dans Android?
- 27. Les types primitifs pointeurs sont-ils en C++?
- 28. Passage de types de données primitifs par référence dans Objective C
- 29. Pourquoi les enums sont-ils considérés comme des types composés?
- 30. Types de primitives en Java
énumérations sont des classes tout à fait normal w/certaines optimisations (pour la sérialisation) + contrôle c-tor pour le niveau d'héritage + tableau partagé supplémentaire (non clonées()) des énumérations déclarées. La méthode publique values () renvoie toujours une nouvelle copie. Ils peuvent implémenter des interfaces et ce n'est pas le cas :) – bestsss