私はこのコードClassCastExceptionをスローすることを期待したいと思います:なぜこのジェネリックキャストは失敗しないのですか?
public class Generics {
public static void main(String[] args) {
method(Integer.class);
}
public static <T> T method(Class<T> t) {
return (T) new String();
}
}
しかし、それはありません。返されたオブジェクトを何とか使うまで、文字列をTにキャストするのは失敗しません。
public class Generics {
public static void main(String[] args) {
method(Integer.class).intValue();
}
public static <T> T method(Class<T> t) {
return (T) new String();
}
}
背景:XMLファイルを非整列化するためにJAXBを使用するクラスを作成しました。次のようになります。
public static <T> T unmarshal(File file, Class<? extends T> clazz)
root-Elementが匿名型であるかどうかによって、TまたはJAXBElementが返されます。もちろん、JAXBElementはTにキャストすることはできません。 私のユニットテストでは、結果を使って何もせずにunmarshal()を呼び出すだけで、すべて正常に動作しました。コードでは、失敗しました。
なぜそれは直接失敗しないのですか?これはバグですか?そうでない場合は、理由を理解したいと思います。
まあ、警告します*。 – Jeremy