Java 1.4 中枚举的替代方法

2022-09-03 17:04:17

由于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
     }
 }

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

receiveSomeValue 是否应该抛出一个 InvalidValueException?

Java 5 枚举的好替代方案是什么?


答案 1

在 1.5 之前版本中最好使用的类型安全枚举模式,最好在 Josh Bloch 的《Effective Java》一书中有所描述。但是,它有一些限制,特别是当您处理不同的类装入器,序列化等时。

你也可以看看Apache Commons Lang项目,以及像John所写的enum类。它是此模式的实现,支持构建自己的枚举。


答案 2

我通常会创建我称之为常量类的东西,像这样的东西:

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() 
  {
    ...
  }
}

其中 和 正在使用 .equalshashCodeid