[英]Integer.class and int.class
這個Java語句如何在沒有警告的情況下編譯?
Class<Integer> x = int.class;
即使
Integer.class != int.class
編輯:以不同的方式,似乎Integer.class
和int.class
沒有任何共同點(見下面的評論),那么為什么這個賦值可能有意義呢?
經過大量的搜索,我在JLS 第15.8.2節文字中看到了這個小片段:
如果p是基本類型的名稱,則讓B為裝箱轉換后的類型p的類型(第5.1.7節)。 那么p.class的類型是Class <B>。
規范沒有解釋為什么會這樣,而不是例如Class<?>
。 我也無法找到任何證據證明這與仿制葯或自動裝箱有關。
Integer
是第一類對象,而int
是原始類型,並且大多數方法Class
如isInstance
, isAssignableFrom
和cast
其上操作Object
s為在的上下文無效int.class
。 因此,我沒有看到任何理由為什么int.class
的類型是Class<Integer>
。
由於自動裝箱 。 您不能在基本類型參數中使用基元,因此基元會被裝入包裝器中。
我不相信這與自動裝箱有任何關系。
這是泛型規則的一部分,它將原始類型視為包裝器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.