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,您明确地 向下转换 。无法保证方法中给出的 FT。假设我这样做,假设建立了隐含的父子关系:

ListCastFunction<Animal, Mammal> lcf = new ListCastFunction<>;
Mammal i = lcf.apply(new Fish());

这会在执行时中断,因为 Fish 不是 Mammal,但它适合您的代码。