获取实现接口的通用枚举的值

Pha*_*low 7 java generics enums interface

我有以下界面:

public interface GenericMethods {
  public String getString();
}
Run Code Online (Sandbox Code Playgroud)

通过这个接口,我实现了这个枚举:

public enum SpecificEnum implements GenericMethods {
  A("NOT"), B("RELATED"), C("TEXT");

  SpecificEnum(String string) {
    this.string = string;
  }

  private String string;
  
  @Override
  public String getString() {
    return this.string;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够使用参数调用函数SpecificEnum.class,并能够调用values()该参数上的函数,以及返回的数组元素上的接口方法。像这样的东西:

class Main {
  public static void main(String[] args) {
    for (GenericMethods gm : getEnums(SpecificEnum.class)) {
      System.out.printf(gm.getString());
    }
  }

  public static T[]<T extends GenericMethods> getEnums(Class<T> enum1) {
    enum1.values();
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,经过大量搜索后,我还没有遇到使用泛型和枚举同时实现接口的案例。我也对泛型类型进行了很多思考,但我找不到能够调用values()泛型枚举类的正确语法。主要目标是以相同的方式管理多个相关的枚举。

Psh*_*emo 9

我怀疑您可能正在寻找类似的东西:

public static <T extends Enum<T> & GenericMethods> T[] getEnums(Class<T> enum1) {
    return enum1.getEnumConstants();
}

public static void main(String[] args) {
    for (GenericMethods gm : getEnums(SpecificEnum.class)) {
        System.out.println(gm.getString());
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:(
演示:https: //ideone.com/v6on2p

NOT
RELATED
TEXT
Run Code Online (Sandbox Code Playgroud)

变化:

  • 移到<T extends GenericMethods>返回类型之前,因为只有泛型方法可以声明其泛型类型。
  • 修改泛型类型以<T extends Enum<T> & GenericMethods>强制 T 除了实现 GenericMethods 之外也成为某些 Enum 的子类型
  • 使用getEnumConstants()而不是像values()我们使用的那样Class,而不是enum类型。