5
我正在檢查Bloch的Effective Java中的異構容器模式,我試圖確定爲什麼在向異構容器中插入對象時需要類引用。我不能使用instance.getClass()
來獲取此參考嗎? JPA的entity manager是不是一個例子?將對象插入類型安全的異構容器時,爲什麼需要類引用?
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);
}
+1確切地說,接口允許'put(Number.class,num)'或'put(Integer.class,num)'適當。 –
'put(Integer.class,num)'會拋出編譯器錯誤。這是有道理的,因爲參數的類型是(類,Number)。您不能將T設置爲整數,因爲Number不是整數。您不能將T設置爲編號,因爲類不是類。儘管如此,由於您可以執行諸如'put(Object.class,num)'之類的操作,因此擁有類型參數仍然很有用。在這種情況下,T被設置爲對象(並且所有數字都是對象,因此它可以工作)。 –
Cod3Citrus