将对象插入类型安全的异构容器时,为什么需要类引用?

jdg*_*day 6 java class

我正在检查Bloch的Effective Java中的异构容器模式,并且我试图确定在将对象插入异构容器时需要类引用的原因.我不能用instance.getClass()这个参考吗?JPA的实体经理不是这样的一个例子吗?

interface BlochsHeterogeneousContainer {

    <T> void put(Class<T> clazz, T instance);

    <T> T get(Class<T> clazz);
}

interface AlternativeHeterogeneousContainer {

    // Class<T> not needed because we can use instance.getClass()
    <T> void put(T instance);

    <T> T get(Class<T> clazz);
}
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 5

不,你不能这样做,因为它不会在继承的情况下给你类引用类型,而是实际对象类的类.

考虑这个例子:

Number num = new Integer(4);
System.out.println(num.getClass());
Run Code Online (Sandbox Code Playgroud)

这将打印:

class java.lang.Integer
Run Code Online (Sandbox Code Playgroud)

而不是java.lang.Number.