![](/img/trans.png)
[英]expected: java.lang.Long<1> but was: java.lang.Integer<1>
[英]Why doesn't java.lang.Integer extend java.lang.Long?
可以將整數值分配給long變量。 可以將整數值自動裝箱到Long引用變量中。 但是無法將Integer對象分配給Long引用變量。
我的視圖是整數/整數是Long / long支持的特定值范圍。
所以層次結構應該是Integer extends Long和Long extends Number。
觀點邀請。
甲Long
包含一個long
構件( value
包含的值) Long
。
如果Integer
是Long
的子類, Integer
將使用基類的long
成員,這是浪費的(因為long
占用int
兩倍),或者忽略它並使用自己的int
成員,這將是更浪費(因為在這種情況下, Integer
類將包含int
成員和基類的long
成員)。
原始類型的盒裝版本應該盡可能高效(因為在某些情況下你被迫使用它們,例如Collection
s,它不能直接保存基元)。 因此,任何會增加Integer
類存儲的類層次結構似乎都是個壞主意。
原因很簡單:如果Integer擴展為Long,那么Integer的實例也將是 Long的實例:
Integer i = 0;
if (i instanceof Long)
// yes! oops... Integer would be a Long
顯然,這不是數學上的情況,不應該是這種情況。
不要將共享一系列值的類型與使類型共享類層次結構的情況混淆。
關於存儲等的討論是實現細節,與此問題所涉及的語言設計注意事項無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.