我有一个将类名映射到它们的枚举类的映射表,我还有一个将字符串(例如"SomeEnum.FIRST")解析为实际对象的方法。但是,Enum.valueOf不接受Class>,而映射表无法存储Class>。
对于代码部分,映射表大致如下:
对于代码部分,映射表大致如下:
private static final HashMap<String, Class<? extends Enum<?>>> enumsMap;
static {
enumsMap = new HashMap<>();
// These are two DIFFERENT enum classes!
registerEnum(SomeEnum.class);
registerEnum(AnotherEnum.class);
}
private static void registerEnum(Class<? extends Enum<?>> enumClass) {
enumsMap.put(enumClass.getSimpleName(), enumClass);
}
这里是解析器(删除了不必要的代码):
public <T extends Enum<T>> Object[] parse(List<String> strParameters) {
Object[] parameters = new Object[strParameters.size()];
for (int i = 0; i < parameters.length; i++) {
String strParameter = strParameters.get(i);
int delim = strParameter.lastIndexOf('.');
String className = strParameter.substring(0, delim - 1);
String enumName = strParameter.substring(delim + 1);
Class<T> enumClass = (Class<T>) enumsMap.get(className);
parameters[i] = Enum.valueOf(enumClass, enumName);
}
return parameters;
}
现在,如果我调用这个parse
函数,我的IDE(Android Studio)会提示我:“Unchecked method 'parse(List)' invocation”。据我所知,这是由于泛型类型造成的。如果我在parse
中删除它,它将无法编译,但警告会消失。有没有什么好的解决方法呢?
parse
中删除T
,Enum.valueOf
会抱怨该类无效。 - xZise