我使用了 Joshua Bloch 的异构容器理念来安全地键入存储/检索值。但我也在存储原始类型(在容器中自动装箱为对象类型),并且无法将值作为原始类型检索。type.cast(value) 似乎将值自动装箱回对象(我已经转换为双精度对象),此时它无法将类型转换回原语。
这是我的代码:
import java.util.LinkedHashMap;
public class TestHeterogeneous {
static private LinkedHashMap<Class<?>, Object> elements = new LinkedHashMap<>();
static public <T> void putElement(Class<T> type, T value) {
elements.put(type, value);
}
static public <T> T getElement(Class<T> type) {
double dValue = (double) elements.get(type);
return type.cast(dValue);
}
public static void main(String[] args) {
putElement(double.class, 12.345);
System.out.println("double value: "+getElement(double.class));
}
}
Exception in thread "main" java.lang.ClassCastException: Cannot cast java.lang.Double to double
at java.lang.Class.cast(Class.java:3084)
at tooldevelopment.TestHeterogeneous.getElement(TestHeterogeneous.java:14)
谢谢,我很感激你的帮助。