【发布时间】:2015-06-27 13:10:14
【问题描述】:
我想在 Java 中定义映射,哪些键是枚举,值的类型取决于键。例如,假设我们有以下枚举类型:
enum KeyType {
HEIGHT(Integer.class),
NAME(String.class),
WEIGHT(Double.class)
// constructor and getter for Class field
}
还有一些地图:
Map< KeyType, Object > map = new EnumMap<>(KeyType.class);
有没有简单安全的写泛型方法的方法:
public < T > T get(KeyType key) {
//...
}
那将从该映射中获取值并将其转换为与类型类对应的?
【问题讨论】:
-
对不起,这个方法是EnumMap提供的,我理解错了吗?
-
我相信没有,因为在编译时它不知道会返回哪种类型——你没有声明它,而是作为参数传递。
-
在使用
get这个方法时,你认为编译器可以根据什么信息推断出T的正确类型?提示:没有这样的信息。结论,您可以取回正确类型的对象,但方法不能是泛型的。这会自动导致@xerx593 的评论:改用Map.get(...)。 -
您需要一个使用
T的参数。但由于枚举不允许类型参数,你将不得不使用一个类或其他东西。
标签: java generics dictionary collections enums