【发布时间】:2015-02-27 00:15:02
【问题描述】:
我有以下代码
public interface SomeInterface { }
public class TestConstants {
public static <E extends Enum<E> & SomeInterface> E getEnumString(Class<E> clazz, String s){
for(E en : EnumSet.allOf(clazz)){
if(en.name().equalsIgnoreCase(s)){
return en;
}
}
return null;
}
public enum A implements SomeInterface {
V1,
V2,
V3;
}
public enum B implements SomeInterface {
V1,
V2,
V3;
}
// And so on.......
}
在代码的其他地方我可以调用调用
TestConstants.getEnumString(TestConstants.B.Class,"V2")
它会返回TestConstants.B.V2 一切都很好。
但我的问题是,如果我不知道我将搜索的实际 Enum 类怎么办 即
Class<?> enumClass 包含其中一个枚举,但我不知道是哪个。
现在我使用 TestConstants 类外部的代码,我可以使用类似以下的代码
if (enumClass.equals(TestConstants.A.class)) {
TestConstants.getEnumString(TestConstants.A.class,value);
} else if (enumClass.equals(TestConstants.B.class)) {
TestConstants.getEnumString(TestConstants.B.class,value);
} else if (enumClass.equals(TestConstants.C.class)) {
// And so on....
但我真的很想将此代码移到 TestConstants 类中。但我似乎无法做到。 例如,如果我添加此功能
public static <E extends Enum<E> & SomeInterface> E fromUnknownClass(Class<?> enumClass, String name) {
if (enumClass.equals(TestConstants.A.class)) {
return TestConstants.fromString(TestConstants.A.class,name); <-- Compile error
} else if .......
.......
}
我得到以下编译错误
incompatible types: inference variable E has incompatible bounds equality constraints:
TestConstants.A upper bounds: E,java.lang.Enum<E>,SomeInterface
我在这里尝试的是否可能,或者是否有一些我不知道的泛型魔法?
【问题讨论】:
-
您返回 e.name()...枚举的字符串表示形式...您不想要枚举吗?或者,您将“v2”放入参数中有什么意义,只是为了取回“v2”......?
-
我不明白你的问题。因此,在“TestConstants 外部的代码”中更好或更简单地解释它,您只需调用 TestConstants.getEnumString(enumClass,value);您不必“静态地”提供类名
-
您是否尝试将
Class<?>参数转换为Class<E extends Enum<E> & SomeInterface>? -
也许这就是你需要的? stackoverflow.com/q/15978730/2001247
-
@ElDuderino 发布了具有您需要的答案的问题。你必须提出论点。但请注意答案中的警告。
标签: java generics enums java-8