Spodziewam ten kod, aby rzucić ClassCastException:Dlaczego ta generyczna obsada nie działa?
public class Generics {
public static void main(String[] args) {
method(Integer.class);
}
public static <T> T method(Class<T> t) {
return (T) new String();
}
}
Ale tak nie jest. Casting String do T nie uda, dopóki nie używać zwrócony obiekt jakoś tak:
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();
}
}
Tło: I utworzeniu klasy, która używa JAXB do unmarshal plik XML. Wygląda to tak:
public static <T> T unmarshal(File file, Class<? extends T> clazz)
W zależności od tego, czy korzeń-Element jest anonimowy typ, czy nie, jest zwrocone T lub JAXBElement. Oczywiście JAXBElement nie może być rzutowany na T. W moim teście jednostkowym, w którym nazwałem tylko unmarshal() bez robienia czegoś z wynikiem, wszystko działało dobrze. W kodzie nie udało się.
Dlaczego nie zawodzi bezpośrednio? Czy to błąd? Jeśli nie, chciałbym zrozumieć, dlaczego.
Cóż, * powoduje * wygenerowanie ostrzeżenia. – Jeremy