我正在检查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)
不,你不能这样做,因为它不会在继承的情况下给你类引用类型,而是实际对象类的类.
考虑这个例子:
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.