假設有下面的代碼:爲什麼在反射投射時隱式投射工作會拋出異常?
@SuppressWarnings("unchecked")
public static <T> T implicitCaster(Class<T> cls, Object o) {
return (T) o;
}
public static <T> T reflectionCaster(Class<T> cls, Object o) {
return cls.cast(o);
}
代碼將按預期在這兩種情況下,以下情況例外,在原語發現:
public static void main(String[] args) {
System.out.println(implicitCaster(int.class, 42));
System.out.println(reflectionCaster(int.class, 42));
}
第一次調用工作正常,但第二個電話投擲java.lang.ClassCastException
。
這是一個忽視自動裝箱的案例嗎?還是不可能在這種情況下提供反射鑄造的自動裝箱? 還是有其他的東西導致這種不一致?
編輯:調用此代碼按預期工作:
public static void main(String[] args) {
System.out.println(implicitCaster(Integer.class, 42));
System.out.println(reflectionCaster(Integer.class, 42));
}
我寫過那裏的代碼適用於每個給定的類,除了原語;因此可以將對象轉換爲泛型類型。其次,你可以將對象投射到基元。 – m3th0dman
@ m3th0dman:我沒有說這是不可能的。我說它在運行時沒有效果。 – SLaks
我現在明白了;但是這種違背了投射法的合同?技術上來說,演員是可能的。 – m3th0dman