2013-12-14 20 views
1

我注意到在Java 7中,集合類(本例中爲ConcurrentLinkedQueue)使用UNSAFE類進行交換和查找操作。
偏移似乎是在編譯時聲明計算:在集合中使用UNSAFE

itemOffset = UNSAFE.objectFieldOffset(local.getDeclaredField("item")); 

如何將這項工作在這樣一個場景,我們沒有在編譯時如確切的參數化類型時,我們嘗試插入到一個蘋果聲明中有Collection<? super Apple>的方法。

它是否使用'Apple'作爲聲明的類來計算偏移量?
希望能夠幫助您理解不安全行爲在這裏計算偏移量的方式。

回答

3

Jave不允許我們使用原始類型作爲泛型的類型參數,只允許引用類型。引用類型被存儲爲始終具有相同大小的引用,因此某些泛型類的對象的內部表示總是相同的,無論它們如何參數化。

因此,收集項目的確切類型無關緊要,因爲item是始終具有相同大小的參考。