用于强制枚举类型定义的 Java 接口

Ale*_*May 2 java enums interface

我需要定义一个接口来重新定义哈希集之类的东西。

所以我有 get(byte key) 类型的方法。由于我无法使用像 String 这样的描述性键,因此我正在寻找一种通用方法来定义接口的某些实现中可用的键。我想为此使用枚举。但是是否可以在接口中强制定义此类枚举?

为了弄清楚我的意思,让我们看一个实现该接口的示例类:

public class ByteHashsetImpl implements ByteHashset {
    public enum Key {
        STATE_A,
        STATE_B,
        STATE_C;
    }

    public enum Value {
        VALUE_A,
        VALUE_B,
        VALUE_C;
    }

    public void get(Key k) {
        /**/
    }

}
Run Code Online (Sandbox Code Playgroud)

我想确保每个实现都定义并使用自己的枚举,称为“键”和“值”。这使得可以使用类似于ByteHashsetImpl.Key接口的每个实现的方法来访问键/值。

是否有可能,或者除了像编码奎德线这样的非正式定义之外还有其他选择吗?

Joa*_*uer 5

您不能强制创建此类枚举,但可以强制类型参数为枚举:

public interface Frobnicator<E extends Enum<E>> {
  void frobnicate(E value);
}


enum Bar {
  X, Y;
}

class BarFrobnicator implements Frobnicator<Bar> {
  @Override
  public void frobnicate(Bar value) {
    // do stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下, aFrobnicator 可以简单地重用现有的enum类,但EinFrobnicator将始终是一个enum类型。