{"id":65,"date":"2008-01-02T15:19:46","date_gmt":"2008-01-02T14:19:46","guid":{"rendered":"http:\/\/loicmathieu.free.fr\/wordpress\/?p=65"},"modified":"2008-05-16T18:39:14","modified_gmt":"2008-05-16T17:39:14","slug":"type-safe-enumeration","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/type-safe-enumeration\/","title":{"rendered":"Type-safe enum\u00e9ration"},"content":{"rendered":"<p>Aujourd&rsquo;hui, je vais vous parler du design pattern Type-safe \u00e9num\u00e9ration et de son impl\u00e9mentation en Java 1.4.<\/p>\n<p>Ceux qui travaillent en Java5 connaissent bien et utilisent (enfin, je l&rsquo;esp\u00e8re pour eux) les \u00e9num\u00e9rations, et bien, avec un peu plus d&rsquo;effort, ce design pattern est impl\u00e9mentable aussi en Java 1.4, je vais ici en donner un exemple tirer de l&rsquo;impl\u00e9mentation de Doug Lea, qui est celle qui a donn\u00e9 naissance \u00e0 l&rsquo;impl\u00e9mentation de r\u00e9f\u00e9rence de Java 5.<\/p>\n<p>Type-safe \u00e9num\u00e9ration. Classe qui permet de d\u00e9finir une \u00e9num\u00e9ration d&rsquo;\u00e9l\u00e9ments, ne contenant aucun constructeur public, elles construit \u00e0 l&rsquo;instantiation la liste de ses \u00e9l\u00e9ments. Les \u00e9l\u00e9ments de l&rsquo;\u00e9num\u00e9ration sont immuable (immutable), on ne peut les modifier. Pour plus de facilit\u00e9, nous feront en sorte que les \u00e9l\u00e9ments soit directement  comparable et s\u00e9rialisable (conseill\u00e9 en J2EE).<\/p>\n<p>Le grand int\u00e9r\u00eat d&rsquo;utiliser les \u00e9num\u00e9ration est que cela permet de clarifier grandement le code et de garantir l&rsquo;utilisation des \u00e9l\u00e9ments comme ils ne peuvent \u00eatre modifi\u00e9s depuis l&rsquo;ext\u00e9rieure de la classe.<\/p>\n<h3><strong>Exemple en Java 1.4<\/strong><\/h3>\n<pre>\/**\n * @author Lo\u00efc MATHIEU\n *\/\npublic class MarquesVoitures implements Serializable, Comparable\n{\n\n    \/\/Le code est transient car les objet sont cr\u00e9\u00e9 \u00e0 l'instantiation.\n    private transient String mCode; \n\n    \/\/Ces deux compteurs vont automatiquement s'incr\u00e9menter gr\u00e2ces aux instantiations ci-dessous\n    private static int sNextOrdinal;\n    private final int mOrdinal = sNextOrdinal++;\n\n    private static List sPrivateValues = new ArrayList();\n\n    \/\/Utilis\u00e9 pour pouvoir r\u00e9cuperer un \u00e9l\u00e9ment de l'\u00e9num\u00e9ration depuis son code\n    private static Map sIndexedValues = new HashMap();\n\n    \/\/Instantiations des \u00e9l\u00e9ments de l'\u00e9num\u00e9ration\n    public static final MarquesVoitures RENAULT = new MarquesVoitures(\"renault\");\n    public static final MarquesVoitures PEUGEOT = new MarquesVoitures(\"peugeot\");\n    public static final MarquesVoitures CITROEN = new MarquesVoitures(\"citroen\");\n    public static final MarquesVoitures LADA = new MarquesVoitures(\"lada \");\n\n    private static final MarquesVoitures[] PRIVATE_VALUES =\n            (MarquesVoitures[]) sPrivateValues.toArray(new MarquesVoitures[0]);\n\n    public static final List VALUES = Collections.unmodifiableList(sPrivateValues);\n\n    private MarquesVoitures(String aCode) {\n        mCode = aCode;\n\n        sPrivateValues.add(this);\n        sIndexedValues.put(aCode, this);\n    }\n\n    public int compareTo(Object aObject) {\n        return mOrdinal - ((MarquesVoitures) aObject).mOrdinal;\n    }\n\n    \/**\n     * Methode appel\u00e9 lors du process de serilization\/deserialization\n     *\/\n    private Object readResolve() throws ObjectStreamException {\n        return create(mOrdinal);\n    }\n\n    public String getCode() {\n        return mCode;\n    }\n\n    private static MarquesVoitures create(int mOrdinal) {\n        return PRIVATE_VALUES[mOrdinal];\n    }\n\n    \/**\n     * Permet de r\u00e9cup\u00e9rer un \u00e9l\u00e9ment de l'\u00e9num\u00e9ration depuis son code,\n     * donc de r\u00e9cup\u00e9re l'objet depuis sa String identifiant\n     *\/\n    public static MarquesVoitures getMarquevoiture(String aCode) {\n        return (MarquesVoitures) sIndexedValues.get(aCode);\n    }\n}<\/pre>\n<h3>Exemple en Java 5<\/h3>\n<pre>public enum MarquesVoitures { renault, peugeot, citroen, lada };<\/pre>","protected":false},"excerpt":{"rendered":"<p>Aujourd&rsquo;hui, je vais vous parler du design pattern Type-safe \u00e9num\u00e9ration et de son impl\u00e9mentation en Java 1.4. Ceux qui travaillent en Java5 connaissent bien et utilisent (enfin, je l&rsquo;esp\u00e8re pour eux) les \u00e9num\u00e9rations, et bien, avec un peu plus d&rsquo;effort, ce design pattern est impl\u00e9mentable aussi en Java 1.4, je vais ici en donner un exemple tirer de l&rsquo;impl\u00e9mentation de Doug Lea, qui est celle qui a donn\u00e9 naissance \u00e0 l&rsquo;impl\u00e9mentation de r\u00e9f\u00e9rence de Java 5. Type-safe \u00e9num\u00e9ration. Classe qui&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/type-safe-enumeration\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[16,17,151,11,18],"class_list":["post-65","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-conception","tag-design-pattern","tag-informatique","tag-java","tag-patron-de-conception"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":601,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/le-pattern-de-specification-et-les-lambdas\/","url_meta":{"origin":65,"position":0},"title":"Le pattern de specification et les lambdas","author":"admin","date":"mardi 27 d\u00e9cembre 2016","format":false,"excerpt":"\u00a0Introduction : le pattern de sp\u00e9cification J'ai r\u00e9cemment mis en place le pattern de sp\u00e9cification pour g\u00e9rer des r\u00e8gles m\u00e9tier au sein d'une de nos application. Je me suis inspir\u00e9 du tr\u00e8s bon article suivant trouv\u00e9 sur le bog de Xebia :\u00a0http:\/\/blog.xebia.fr\/2009\/12\/29\/le-pattern-specification-pour-la-gestion-de-vos-regles-metier\/ cet article, bien qu'ancien (7 ans!) est toujours\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"specificationpattern","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/SpecificationPattern-1024x506.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/SpecificationPattern-1024x506.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/SpecificationPattern-1024x506.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/SpecificationPattern-1024x506.png?resize=700%2C400 2x"},"classes":[]},{"id":652,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/les-nouveautes-de-java-9-pour-les-developeurs\/","url_meta":{"origin":65,"position":1},"title":"Les nouveaut\u00e9s de java 9 pour les d\u00e9veloppeurs","author":"admin","date":"lundi 27 mars 2017","format":false,"excerpt":"Maintenant que Java 9 est Features Complete, il est temps de se pencher sur toutes les nouveaut\u00e9s que cette nouvelle version va nous apporter, \u00e0 nous, d\u00e9velopeurs utilisant java. Bien sur, tout le monde a entendu parler de la modularisation du JDK (project Jigsaw) attendu depuis tr\u00e8s longtemps. Et bien,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"jshell the Java REPL","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/jshell.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":92,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/rest-architecture-orientee-ressource\/","url_meta":{"origin":65,"position":2},"title":"REST &#8211; Architecture Orient\u00e9e Ressource","author":"admin","date":"mercredi 25 mars 2009","format":false,"excerpt":"Au menu aujourd'hui, un sujet tr\u00e8s tendance: REST. Abord\u00e9\u00a0 par le biais de l'Architecture Orient\u00e9 Ressource (ou ROA: Resource Oriented Architecture), autrement dit, comment cr\u00e9er une architecture de service bas\u00e9 sur REST. D\u00e9finitions Comme toujours, commen\u00e7ons par quelques d\u00e9finitions. Je vais les faire assez th\u00e9orique sinon apr\u00e8s, il ne me\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":64,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/convention-over-configuration\/","url_meta":{"origin":65,"position":3},"title":"convention over configuration","author":"admin","date":"mercredi 19 d\u00e9cembre 2007","format":false,"excerpt":"\"Convention over Configuration\" (on trouve parfois une traduction par \"convention plut\u00f4t que configuration), ce design pattern (ou patron de conception, pour faire plaisir aux francophones intransigeant) est un des plus int\u00e9r\u00e9ssant de ceux \u00e0 la mode en ce moment. Le principe en est tr\u00e8s simple: les applications se basent sur\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":377,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/session-chti-jug-sur-les-technologies-google\/","url_meta":{"origin":65,"position":4},"title":"Ch&rsquo;ti Jug: les technologies Google","author":"admin","date":"mercredi 11 novembre 2009","format":false,"excerpt":"Hello, Lundi j'ai \u00e9t\u00e9 \u00e0 la session du Ch'ti Jug sur les technologies Google qui s'est pass\u00e9 \u00e0 l'ISEN et \u00e9tait sponsoris\u00e9e par SII. C'\u00e9tait la premi\u00e8re fois que j'assistais \u00e0 un \u00e9v\u00e8nement organis\u00e9 par le Ch'ti Jug et comme c'\u00e9tait int\u00e9ressant, j'aimerais partager avec vous l\u00e0 dessus. Ch'ti Jug?\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"Google Wave","src":"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/google-wave.jpg?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/google-wave.jpg?resize=350%2C200 1x, https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/google-wave.jpg?resize=525%2C300 1.5x"},"classes":[]},{"id":269,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/implementer-une-architecture-de-service-web-restfull-avec-restlet-et-son-extention-spring\/","url_meta":{"origin":65,"position":5},"title":"Implementer une architecture de service web RESTfull avec Restlet et son extention Spring","author":"admin","date":"jeudi 10 septembre 2009","format":false,"excerpt":"Cet article fait suite mon article REST - Architecture Orient\u00e9e Ressource en lui donnant une impl\u00e9mentation bas\u00e9 sur le framework Restlet. Le principe de Restlet : Restlet est un framework Java 5.0 qui ob\u00e9it aux standard RESTful et permet de cr\u00e9er facilement des application RESTful. Il remplace la sp\u00e9cification J2EE\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/65\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}