Constantes de classes ou enumération ?
Bonjour,
Avant JDK 1.5, on utilisait une classe avec différents attributs en static final afin de représenté une valeur par une constante compréhensible par l'être humain.
Chaque valeur est donc compilé dans une classe qui ne contient que ça mais qui pourrait contenir un ensemble de méthode permettant de gérer cette classe mais sans associer un objet et donc des méthodes à chaque valeur de constantes.
Avec JDK 1.5, on a plus tendance à utiliser les type d'énumération comme le propose la documentation.
Les énumérations créent un objet avec un constructeur en se basant sur la structure de "class" qu'on lui aura donné.
C'est à dire que chaque énumération est un objet de l'énumération même, toutes les méthodes et attributs d'une énumération sont propres (à relativiser tout de même) à chaque membre de l'énumération.
Ainsi dans une énumération, on ne définit pas l'objet énuméré lui même mais plutot chaque énumération de cet objet.
Ma question s'adresse essentiellement à ceux qui connaissent au moins cela !
Mon cas: (à titre principalement indicatif)
Je souhaite créé un lot de ressources (bois, or, fer, etc...) pour un jeu.
Pour les utiliser, j'ai besoin de pouvoir y associer un entier (pour des Arrays) et d'y avoir accès via le nom de cette ressource dans une classe/énumération, e.g Resources.WOOD .
Je dois pouvoir lire ces Ressources en boucle afin d'effectuer un traitement pour chacune d'elle dans différents tableaux et différentes classes.
Je dois pouvoir aussi, si possible, créé des sous énumérations de l'énumération de ces ressources afin de rassembler les ressources en des sortes de groupes que je devrais aussi pouvoir lire en boucle.
Le jeu est complet et donc très lourd, je souhaite l'optimiser un maximum afin d'y permettre une forte utilisation.
Mes questions:
Est-il préférable d'utiliser les constantes de classe (static final ...) ou d'utiliser une enum ?
Une énumération ne serait pas trop lourde pour une forte utilisation ?!
Avez vous d'autres idées ou propositions à ajouter ?!
Sources:
informit.com (en)
Doc Enum Types (en)
Doc Enums (en)