Class ValuedEnum

  extended by org.apache.commons.lang.enums.Enum
      extended by org.apache.commons.lang.enums.ValuedEnum
All Implemented Interfaces:
Serializable, Comparable

public abstract class ValuedEnum
extends Enum

Abstract superclass for type-safe enums with integer values suitable for use in switch statements.

NOTE:Due to the way in which Java ClassLoaders work, comparing Enum objects should always be done using the equals() method, not ==. The equals() method will try == first so in most cases the effect is the same.

To use this class, it must be subclassed. For example:

 public final class JavaVersionEnum extends ValuedEnum {
   //standard enums for version of JVM
   public static final int  JAVA1_0_VALUE  = 100;
   public static final int  JAVA1_1_VALUE  = 110;
   public static final int  JAVA1_2_VALUE  = 120;
   public static final int  JAVA1_3_VALUE  = 130;
   public static final JavaVersionEnum  JAVA1_0  = new JavaVersionEnum( "Java 1.0", JAVA1_0_VALUE );
   public static final JavaVersionEnum  JAVA1_1  = new JavaVersionEnum( "Java 1.1", JAVA1_1_VALUE );
   public static final JavaVersionEnum  JAVA1_2  = new JavaVersionEnum( "Java 1.2", JAVA1_2_VALUE );
   public static final JavaVersionEnum  JAVA1_3  = new JavaVersionEnum( "Java 1.3", JAVA1_3_VALUE );

   private JavaVersionEnum(String name, int value) {
     super( name, value );
   public static JavaVersionEnum getEnum(String javaVersion) {
     return (JavaVersionEnum) getEnum(JavaVersionEnum.class, javaVersion);
   public static JavaVersionEnum getEnum(int javaVersion) {
     return (JavaVersionEnum) getEnum(JavaVersionEnum.class, javaVersion);
   public static Map getEnumMap() {
     return getEnumMap(JavaVersionEnum.class);
   public static List getEnumList() {
     return getEnumList(JavaVersionEnum.class);
   public static Iterator iterator() {
     return iterator(JavaVersionEnum.class);

NOTE:These are declared final, so compilers may inline the code. Ensure you recompile everything when using final.

The above class could then be used as follows:

 public void doSomething(JavaVersionEnum ver) {
   switch (ver.getValue()) {
     case JAVA1_0_VALUE:
       // ...
     case JAVA1_1_VALUE:
       // ...

As shown, each enum has a name and a value. These can be accessed using getName and getValue.

NOTE: Because the switch is ultimately sitting on top of an int, the example above is not type-safe. That is, there is nothing that checks that JAVA1_0_VALUE is a legal constant for JavaVersionEnum.

The getEnum and iterator methods are recommended. Unfortunately, Java restrictions require these to be coded as shown in each subclass. An alternative choice is to use the EnumUtils class.

2.1 (class existed in enum package from v1.0)
$Id: 466275 2006-10-20 22:02:34Z bayard $
Apache Avalon project, Stephen Colebourne
See Also:
Serialized Form

Field Summary
Fields inherited from class org.apache.commons.lang.enums.Enum
Constructor Summary
protected ValuedEnum(String name, int value)
          Constructor for enum item.
Method Summary
 int compareTo(Object other)
          Tests for order.
protected static Enum getEnum(Class enumClass, int value)
          Gets an Enum object by class and value.
 int getValue()
          Get value of enum item.
 String toString()
          Human readable description of this Enum item.
Methods inherited from class org.apache.commons.lang.enums.Enum
equals, getEnum, getEnumClass, getEnumList, getEnumMap, getName, hashCode, iterator, readResolve
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Constructor Detail


protected ValuedEnum(String name,
                     int value)
Constructor for enum item.

name - the name of enum item
value - the value of enum item
Method Detail


protected static Enum getEnum(Class enumClass,
                              int value)

Gets an Enum object by class and value.

This method loops through the list of Enum, thus if there are many Enums this will be slow.

enumClass - the class of the Enum to get
value - the value of the Enum to get
the enum object, or null if the enum does not exist
IllegalArgumentException - if the enum class is null


public final int getValue()

Get value of enum item.

the enum item's value.


public int compareTo(Object other)

Tests for order.

The default ordering is numeric by value, but this can be overridden by subclasses.

NOTE: From v2.2 the enums must be of the same type. If the parameter is in a different class loader than this instance, reflection is used to compare the values.

Specified by:
compareTo in interface Comparable
compareTo in class Enum
other - the other object to compare to
-ve if this is less than the other object, +ve if greater than, 0 of equal
ClassCastException - if other is not an Enum
NullPointerException - if other is null
See Also:


public String toString()

Human readable description of this Enum item.

toString in class Enum
String in the form type[name=value], for example: JavaVersion[Java 1.0=100]. Note that the package name is stripped from the type name.

Copyright © 2001-2007 The Apache Software Foundation. All Rights Reserved.