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()泛型枚举类的正确语法。主要目标是以相同的方式管理多个相关的枚举。
我怀疑您可能正在寻找类似的东西:
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类型。