【发布时间】:2012-08-22 02:21:22
【问题描述】:
我正在尝试将一个通用枚举列表转换为另一种通用列表类型,但总是出现以下编译错误:
不适用于参数
private static <T extends Enum<T>> List<T> enumListFromEnumList(List<Object> sourceEnumsList, Class<T> classObject) {
List<T> enums = new ArrayList<T>();
if(sourceEnumsList != null) {
for(Object enumObject : sourceEnumsList) {
if (enumObject instanceof Enum)
enums.add(Enum.valueOf(classObject, enumObject.toString().toUpperCase()));
}
}
return enums;
}
即使我试过这个:
private static <T extends Enum<T>> List<T> enumListFromEnumList(List<T> sourceEnumsList, Class<T> classObject) {
List<T> enums = new ArrayList<T>();
if(sourceEnumsList != null) {
for(T enumObject : sourceEnumsList) {
enums.add(Enum.valueOf(classObject, enumObject.toString().toUpperCase()));
}
}
return enums;
}
这就是我使用函数的方式:
adapterInfo.setResponseTypeList( enumListFromEnumList(info.getResponseTypeList(), CAPInfo.ResponseType.class));
更新:
当我转换成这个时它可以工作:
private static <S extends Enum<S>, T> List<S> enumListFromEnumList(List<T> sourceEnumsList, Class<S> classObject) {
List<S> enums = new ArrayList<S>();
if(sourceEnumsList != null) {
for(T enumObject : sourceEnumsList) {
enums.add(Enum.valueOf(classObject, enumObject.toString().toUpperCase()));
}
}
return enums;
}
所以现在的问题是如何翻译“<S extends Enum<S>, T> List<S>”部分(我的意思是它是如何工作的)
【问题讨论】:
-
看起来你正在尝试用复杂的方法做一些简单的事情。你能描述一下你已经拥有什么以及你想要实现什么,以便人们可以提出最简单的方法吗?
-
另外,在使用枚举时,您通常希望使用 EnumSet,而不是 List(除非您需要重复值或自定义顺序)
-
感谢改进...
标签: java generics enums type-conversion