Can*_*lms 0 java generics types casting unchecked
是否指定参数化泛型类型的继承关系不足以确保类型安全?例如:
public class ListCastFunction<F, T extends F> implements Function<F, T> {
public final T apply(final F from) {
return (T) from;
}
}
Run Code Online (Sandbox Code Playgroud)
这仍然会生成编译器警告.如果我们知道T extends F,它真的没有检查吗?
你铸造F的T,但因为T extends F,你是明确的向下转换.没有办法保证方法中的F给定是a T.假设我这样做,假设隐含的父子关系是:
ListCastFunction<Animal, Mammal> lcf = new ListCastFunction<>;
Mammal i = lcf.apply(new Fish());
Run Code Online (Sandbox Code Playgroud)
这会在执行时中断,因为a Fish不是a Mammal,但它适合你的代码.