java中的异构容器,包括原始类型

时间:2013-11-03 00:54:43

标签: java generics casting containers heterogeneous

我使用了Joshua Bloch的异构容器概念来安全地存储/检索值。但我也存储基本类型(在容器中自动装箱到对象类型),并且无法将值检索为基本类型。 type.cast(value)似乎自动将值返回到一个对象(我已经转换为double),此时它不能键入强制转换为原语。

这是我的代码:

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)

谢谢,感谢您的帮助。

0 个答案:

没有答案