Java Generics extends 仍然生成未检查的转换警告
Java Generics extends still generates unchecked cast warning
指定参数化泛型类型的继承关系是否不足以确保类型安全?例如:
public class ListCastFunction<F, T extends F> implements Function<F, T> {
public final T apply(final F from) {
return (T) from;
}
}
这仍然会生成编译器警告。如果我们知道T extends F
,是不是真的没有查到?
您将 F
转换为 T
,但由于 T extends F
,您明确地 向下转换 。无法保证方法中给出的 F
是 T
。假设我这样做,假设建立了隐含的父子关系:
ListCastFunction<Animal, Mammal> lcf = new ListCastFunction<>;
Mammal i = lcf.apply(new Fish());
这会在执行时中断,因为 Fish
不是 Mammal
,但它适合您的代码。
指定参数化泛型类型的继承关系是否不足以确保类型安全?例如:
public class ListCastFunction<F, T extends F> implements Function<F, T> {
public final T apply(final F from) {
return (T) from;
}
}
这仍然会生成编译器警告。如果我们知道T extends F
,是不是真的没有查到?
您将 F
转换为 T
,但由于 T extends F
,您明确地 向下转换 。无法保证方法中给出的 F
是 T
。假设我这样做,假设建立了隐含的父子关系:
ListCastFunction<Animal, Mammal> lcf = new ListCastFunction<>;
Mammal i = lcf.apply(new Fish());
这会在执行时中断,因为 Fish
不是 Mammal
,但它适合您的代码。