Here are things you want to do with enums, but were afraid to ask how. Each example is a complete class that
Demonstrate ordinality in enumerations.
package com.etretatlogiciels.examples.enums; public enum Ordinal { Zero ( 0 ), One ( 1 ), Two ( 2 ), Three ( 3 ), Four ( 4 ); private int ordinal = 0; private Ordinal( int ordinalvalue ) { this.ordinal = ordinalvalue; } public int getOrdinal() { return this.ordinal; } public String getName() { return name(); /* ! */ } public String toJson() { StringBuilder sb = new StringBuilder(); sb.append( "{ " ).append( "\"ordinal\":\"" + getOrdinal() + "\"" ); sb.append( " }" ); return sb.toString(); } public static String nameFromOrdinal( int ordinalvalue ) { if( ordinalvalue > Ordinal.MAXIMUM ) return null; return Ordinal.values()[ ordinalvalue ].getName(); } public static String nameFromOrdinalUnprotected( int ordinalvalue ) { return Ordinal.values()[ ordinalvalue ].getName(); } public static String toJsonList() { boolean one = false; StringBuilder sb = new StringBuilder(); for( Ordinal ordinal : Ordinal.values() ) { if( !one ) { one = true; sb.append( "[ " ); } else { sb.append( ", " ); } sb.append( ordinal.toJson() ); } sb.append( " ]" ); return sb.toString(); } public static final int MAXIMUM; static { int hi = 0; for( @SuppressWarnings( "unused" ) Ordinal ordinal : Ordinal.values() ) hi++; MAXIMUM = hi - 1; } public static void main( String[] args ) { Ordinal o = Ordinal.Two; System.out.println( o ); System.out.println( o.getName() ); System.out.println( Ordinal.nameFromOrdinal( 3 ) ); System.out.println( o.toString() ); System.out.println( o.toJson() ); System.out.println( Ordinal.toJsonList() ); System.out.println( Ordinal.nameFromOrdinal( 9 ) ); System.out.println( Ordinal.nameFromOrdinalUnprotected( 9 ) ); } }
Output from running the main() method above:
Two Two Three Two { "ordinal":"2" } [ { "ordinal":"0" }, { "ordinal":"1" }, { "ordinal":"2" }, { "ordinal":"3" }, { "ordinal":"4" } ] null Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 at com.etretatlogiciels.examples.enums.Ordinal.nameFromOrdinalUnprotected(Ordinal.java:38) at com.etretatlogiciels.examples.enums.Ordinal.main(Ordinal.java:89)
Demonstrate the use of strings with an enumeration. The example here associates ISO two-letter codes with language names and even some alternate language names.
package com.etretatlogiciels.examples.enums; public enum IsoLanguage { zh ( "Chinese" ), en ( "English" ), fr ( "French" ), gd ( "Gaelic", "Scottish" ), gv ( "Gaelic", "Manx" ), de ( "German" ), el ( "Greek" ), es ( "Spanish" ), to ( "Tonga", "Tongan" ), cy ( "Welsh" ), zu ( "Zulu" ); // add the other 135+ languages... private String name = null; private String name2 = null; private IsoLanguage( String name ) { this( name, null ); } private IsoLanguage( String name, String name2 ) { this.name = name; this.name2 = name2; } public String getCode() { return name(); /* ! */ } public String getName() { return this.name; } public String getName2() { return this.name2; } public String toJson() { StringBuilder sb = new StringBuilder(); sb.append( "{ " ) .append( "\"code\":\"" + getCode() + "\", " ); sb.append( "\"name\":\"" + getName() + "\"" ); if( this.name2 != null ) sb.append( ", " ).append( "\"name2\":\"" + getName2() + "\"" ); sb.append( " }" ); return sb.toString(); } public static String toJsonList() { boolean one = false; StringBuilder sb = new StringBuilder(); for( IsoLanguage language : IsoLanguage.values() ) { if( !one ) { one = true; sb.append( "[ " ); } else { sb.append( ", " ); } sb.append( language.toJson() ); } sb.append( " ]" ); return sb.toString(); } public static final String ISOLANGUAGES = toJsonList(); public static void main( String[] args ) { IsoLanguage l = IsoLanguage.en; System.out.println( l ); System.out.println( l.getName() ); System.out.println( l.getName2() ); System.out.println( l.toString() ); System.out.println( l.toJson() ); System.out.println( "--------------------" ); l = IsoLanguage.gv; System.out.println( l ); System.out.println( l.getName() ); System.out.println( l.getName2() ); System.out.println( l.getName2() + " " + l.getName() ); System.out.println( l.toString() ); System.out.println( l.toJson() ); System.out.println( "--------------------" ); System.out.println( IsoLanguage.toJsonList() ); } }
Output from running the main() method above:
en English null en { "code":"en", "name":"English" } -------------------- gv Gaelic Manx Manx Gaelic gv { "code":"gv", "name":"Gaelic", "name2":"Manx" } -------------------- [ { "code":"zh", "name":"Chinese" }, { "code":"en", "name":"English" }, { "code":"fr", "name":"French" }, \ { "code":"gd", "name":"Gaelic", "name2":"Scottish" }, { "code":"gv", "name":"Gaelic", "name2":"Manx" }, \ { "code":"de", "name":"German" }, { "code":"el", "name":"Greek" }, { "code":"es", "name":"Spanish" }, \ { "code":"to", "name":"Tonga", "name2":"Tongan" }, { "code":"cy", "name":"Welsh" }, \ { "code":"zu", "name":"Zulu" } ]