次のコードがあるとします。
@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));
}
最初の呼び出しは期待どおりに機能しますが、2 番目の呼び出しはスローしjava.lang.ClassCastException
ます。
これは、オートボクシングが無視された特殊なケースですか? または、この場合、リフレクション キャストのオートボクシングを提供することは不可能ですか? それとも、この矛盾を引き起こしている何か他のものがありますか?
編集:このコードを呼び出すと、期待どおりに機能します:
public static void main(String[] args) {
System.out.println(implicitCaster(Integer.class, 42));
System.out.println(reflectionCaster(Integer.class, 42));
}