10
votes

Remplace les constructions ENUM avec des classes de Java toujours pertinentes?

Je lis je lis efficacement Java écrit par Joshua Bloch Publié en 2008 et un conseil consiste à remplacer les constructions ENUM avec des classes. Voici l'exemple indiqué à partir du livre. XXX PRE>

Ma question est que Java prend maintenant en charge le type Enum, est-il toujours une bonne idée d'utiliser l'approche ci-dessus? Voici l'exemple de type Java Enum. P>

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}


4 commentaires

Enums en Java sont des cours.


Pour une fonctionnalité de base enum, il n'y a aucune raison de ne pas utiliser de simple Enum s. Il y a quelques petites modifications avancées que vous ne pouvez pas faire avec Enums où le modèle d'énumération de type peut encore être appliqué.


Lisez la 2e édition du livre, cela en vaut vraiment la peine, car il couvre les nouvelles fonctionnalités Java.


Dans le livre, il se réfère à la construction «C» Enum, pas la Java Enum.


3 Réponses :


11
votes

Le livre "Java" efficace a été écrit bien avant l'introduction de Enum code> s dans la langue, je vous recommande donc d'utiliser la fonction Enum code> à la place. Heureusement, Java Enum code> s est très polyvalent, vous pouvez donc suivre le conseil de Joshua à l'aide de la fonctionnalité ENUM CODE>:

public enum Day {
    SUNDAY("Sunday", 0)
,   MONDAY("Monday", 1)
,   TUESDAY("Tuesday", 2)
,   WEDNESDAY("Wednesday", 3)
,   THURSDAY("Thursday", 4)
,   FRIDAY("Friday", 5)
,   SATURDAY("Saturday", 6);

    private String name;
    private int ordinal;
    public String getName() { return name; }
    public int getOrdinal() { return ordinal; }
    public Day(String name, int ordinal) {
        this.name = name;
        this.ordinal = ordinal;
    }
}


6 commentaires

Les énumîtres sont une construction assez utile aussi.


Il convient de noter que la 2e édition couvre l'utilisation d'Enums.


Merci Dasblinkenlight, votre exemple est très utile.


Pourquoi l'ordinal ici? Enums ont une méthode d'origine intégrée () qui fait exactement ce que vous faites.


@fge C'est seulement une illustration - je voulais ajouter un deuxième paramètre à passer au constructeur, pour illustrer le point que vous pouvez transmettre plusieurs paramètres. Le "jour de la semaine" Enum a trop peu de choses associées à celle-ci, cependant, j'ai donc décidé d'ajouter de la mienne.


@dasblinkenlight j'ai aussi une question liée à Enums ici . Voulait voir si nous pouvons représenter cela facilement avec des énums ou non.



2
votes

Je pense que l'idée est exactement opposée. Si vous avez une structure enum, utilisez Enum .

Votre exemple de classe n'est pas exactement costume à l'énum que vous avez écrit. Tout d'abord, il ne peut pas être compilé car il contient plusieurs champs nommés clubs . Deuxièmement, Enum contient des journées qui ne sont pas mentionnées dans votre classe.


1 commentaires

Oups! Vous avez attrapé ma faute de frappe.



0
votes

Autant que je sache, Java compile Enum-S à Dernière finale statique publique . Vous pouvez vérifier cela en affichage des fichiers Enum .Class avec Javap ( http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javap.html ).


1 commentaires

Seulement si le code source n'a pas d'importance, et je dirais que la source est très importante.