不過在對於 primitive type 時,無法使用這個檢查
另外當類別只能在執行期間才會知道的情況下,也沒辦法使用 instanceof
這時可以使用類別的 isAssignableFrom() 或者 isInstanceOf() 來檢查。
範例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
public class Main { public static void main(String[] args) { System.out.println( "Test int 123" ); check( 123 ); System.out.println(); System.out.println( "Test Integer.MAX_VALUE" ); check(Integer.MAX_VALUE); System.out.println(); System.out.println( "Test Long.MAX_VALUE" ); check(Long.MAX_VALUE); } private static void check (Object obj) { System.out.println(String.format( "int.class.isAssignableFrom(): %s" , int . class .isAssignableFrom(obj.getClass()))); System.out.println(String.format( "Integer.class.isAssignableFrom(): %s" , Integer. class .isAssignableFrom(obj.getClass()))); System.out.println(String.format( "long.class.isAssignableFrom(): %s" , long . class .isAssignableFrom(obj.getClass()))); System.out.println(String.format( "Long.class.isAssignableFrom(): %s" , Long. class .isAssignableFrom(obj.getClass()))); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Test int 123 int.class.isAssignableFrom(): false Integer.class.isAssignableFrom(): true long.class.isAssignableFrom(): false Long.class.isAssignableFrom(): false Test Integer.MAX_VALUE int.class.isAssignableFrom(): false Integer.class.isAssignableFrom(): true long.class.isAssignableFrom(): false Long.class.isAssignableFrom(): false Test Long.MAX_VALUE int.class.isAssignableFrom(): false Integer.class.isAssignableFrom(): false long.class.isAssignableFrom(): false Long.class.isAssignableFrom(): true |
因此在 main() 中宣告的 int 進入 check(Object obj) 後,輸出是 Integer 型態而非 int 型態
同時這個測試也能看出,雖然在 primitive type 中,int 的數值是可以指派給 long 變數,但轉型成 Object type 時,Integer 就不能指派給 Long 了。
附註:
本來這個測試是想驗證兩個問題,一個就是上面講到的,對 int 檢查 Long.class.isAssignableFrom() 是否會通過
另一個則是能不能直接對 primitive type 檢查是否為 primitive type。
從 [2] 的描述看起來,似乎是可以檢查 primitive type,但我想嘗試時卻不知道該怎麼樣寫才會通過編譯
如果有人知道的話,還請提供一點提示!m(_ _)m
參考資料:
沒有留言:
張貼留言