簡體   English   中英

isAssignableFrom with reference和primitive類型

[英]isAssignableFrom with reference and primitive types

我想更好地理解原始和引用類型之間的Java中的isAssignableFrom行為。

例如:

System.out.println(boolean.class.isAssignableFrom(Boolean.class)); // false
System.out.println(Boolean.class.isAssignableFrom(boolean.class)); // false

boolean primitive;
Boolean referenceType = true;
primitive = referenceType;
System.out.println(primitive); // true

我知道在分配原語< - >時會引用裝箱/取消裝箱根據需要發生,但我認為因此isAssignableFrom會在上面的前兩個例子中返回true。

有人可以解釋為什么它返回false,這里適當的測試是什么?

實際上無法為Boolean變量分配boolean值 - 但您可以使用自動裝箱 boolean 轉換boolean Boolean

JavaDocs使規則非常清晰:

確定此Class對象表示的類或接口是否與指定的Class參數表示的類或接口相同,或者是它們的超類或超接口。 如果是這樣,它返回true; 否則返回false。 如果此Class對象表示基本類型,則如果指定的Class參數恰好是此Class對象,則此方法返回true;否則返回true。 否則返回false。

1.4javadocs已經指定:

如果此Class對象表示基本類型,則如果指定的Class參數恰好是此Class對象,則此方法返回true;否則返回true。 否則返回false。

因此,在引入自動裝箱之前,此方法的行為已鎖定,並且無法更改(必須引入新方法)。

鑒於此錯誤報告 ,很明顯並非所有圍繞Class對象的邊緣情況以及自動裝箱如何改變期望都已完全處理。

為了回答你問題的第二部分,我知道測試這個案例的唯一方法是一系列if語句或一些類似的解析機制來“封裝”基本類類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM