Gibt die Vererbungsbeziehung parametrisierter generischer Typen nicht genug an, um die Typensicherheit zu gewährleisten? Zum Beispiel:Java Generics extends generiert immer noch ungeprüfte Cast-Warnung
public class ListCastFunction<F, T extends F> implements Function<F, T> {
public final T apply(final F from) {
return (T) from;
}
}
Dies generiert immer noch eine Compiler-Warnung. Wenn wir wissen, T extends F
, ist es wirklich nicht überprüft?
Danke. Ist es explizit erforderlich, dass das gegebene "F" ein "T" ist, ohne es absichtlich zu überprüfen? –
Verwenden Sie 'T' in Ihrer Deklaration anstatt' F'? – sisyphus
@CannonPalms der einzige Weg zu garantieren, dass 'F' ist ein' T' ist, wenn 'F extendsT' - und dann müssten Sie nicht casten - aber Sie könnten auch einfach' new ArrayList (listOfT) 'auch verwenden , ohne 'ListCastFunction' zu benötigen. –