я ожидал бы этот код, чтобы бросить 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();
}
}
Но это не так. Кастинг Строка Т не подведет, пока я не использовать возвращаемый объект как-то, как:
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();
}
}
фона: Я создал класс, который использует JAXB для распаковать файл XML. Это выглядит следующим образом:
public static <T> T unmarshal(File file, Class<? extends T> clazz)
В зависимости от того, является ли корневой элемент анонимного типа или нет, либо T или JAXBElement возвращается. JAXBElement, конечно же, нельзя отнести к T. В моем модульном тесте, где я только называл unmarshal(), ничего не делая с результатом, все работало нормально. В коде это не удалось.
Почему это не удается напрямую? Это ошибка? Если нет, я хотел бы понять, почему.
Ну, это * делает предупреждение. – Jeremy