Java 1.4中枚举的替代方法

Dan*_*ura 13 java enums java1.4

由于Java 1.4没有枚举,我正在做这样的事情:

public class SomeClass {
     public static int SOME_VALUE_1 = 0;
     public static int SOME_VALUE_2 = 1;
     public static int SOME_VALUE_3 = 2;

     public void receiveSomeValue(int someValue) {
            // do something
     }
 }
Run Code Online (Sandbox Code Playgroud)

receiveSomeValue的调用者应传递这3个值,但他可以传递任何其他int.如果它是枚举,则调用者只能传递一个有效值.

应该receiveSomeValue抛出一个InvalidValueException吗?

什么是Java 5枚举的好方法?

Rol*_*der 28

在1.5版中最好使用的是Typesafe Enum Pattern,在Josh Bloch的Effective Java一书中有最佳描述.但是它有一些限制,特别是在处理不同的类加载器,序列化等时.

你也可以看看Apache Commons Lang项目,特别是enum类,就像John写的那样.它是这种模式的一种实现,支持构建自己的枚举.


Nic*_*olt 7

我通常创建我称之为常量类的东西,有些东西是这样的:

public class MyConstant 
{
  public static final MyConstant SOME_VALUE = new MyConstant(1);
  public static final MyConstant SOME_OTHER_VALUE = new MyConstant(2);
  ...

  private final int id;


  private MyConstant(int id)
  {
    this.id = id;
  }

  public boolean equal(Object object) 
  {
    ...
  }

  public int hashCode() 
  {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

在哪里equalshashCode正在使用id.


Joh*_*her 6

Apache Commons Lang有一个Enum类,它运行良好,很好地涵盖了Java 5 Enums提供的内容.