2009-10-30 141 views
10

我想更好地瞭解原始和引用類型之間在Java中isAssignableFrom行爲。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,以及這裏的適當測試是什麼?

回答

11

不能實際上分配boolean值到Boolean變量 - 但你可以從使用boolean自動裝箱轉換Boolean

JavaDocs制定規則很清楚:

判定此Class對象所表示的類或接口 是 或者相同,或者是一個超類 或超接口,類或 界面由指定的 Class參數表示。如果 那麼它返回true;否則返回false。如果 這個Class對象表示 原始類型,這種方法如果指定的類參數 正是這個類對象返回 真; 否則返回false。

6

javadocs from 1.4已經指定:

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

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

鑑於這種bug report,這是很明顯的是,並非所有的周圍的Class對象,以及如何在邊緣的情況下自動裝箱變化的預期完全處理。

爲了回答你問題的第二部分,我知道,以測試這種情況下,唯一的辦法是一系列的if語句或一些類似的決議機制「盒子」的原班型。