2015-10-10 62 views
1

這裏是一個非常簡單的情況:我試圖鑄造對象類型到一個基本是這樣的:自動裝箱/開箱而鑄造整數使用到int「投」方法

Object object = Integer.valueOf(1234); 

int result1 = int.class.cast(object); //throws ClassCastException: Cannot convert java.lang.integer to int 

int result2 = (int)object; //works fine 

這是的源代碼「班級」的鑄造方法

public T cast(Object obj) { 
    if (obj != null && !isInstance(obj)) 
     throw new ClassCastException(cannotCastMsg(obj)); 
    return (T) obj; 
} 

private String cannotCastMsg(Object obj) { 
    return "Cannot cast " + obj.getClass().getName() + " to " + getName(); 
} 

爲什麼會發生這種情況?其他基元也一樣。

Live Example

+4

那麼,'isInstance'的文檔指定:「如果這個Class對象表示一個基本類型,則此方法返回false。」所以這並不奇怪 - 但是'cast'文檔應該說它對於原始類型總是會失敗。 –

+0

所以我不應該對基元使用強制轉換方法,而是直接使用(int)強制轉換它? –

+0

@AnmolGupta:是的,基本上。 –

回答

6

cast不能真正爲基元,做工精良因爲它不能返回實際的基本類型的值,由於Java泛型...所以它會再次反正最終拳擊。如果你不直接分配一個值,它也必須因爲這個原因被裝箱。

所以基本上,如果你想轉換成int,就直接轉換。

isInstancedocumented是始終爲基元返回false

如果此Class對象表示一個基本類型,此方法返回false

... cast也許應該也是。