0

我使用了 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)

谢谢,我很感激你的帮助。

4

0 回答 0