从泛型类型到相同类型的未经检查的强制转换

Nic*_*kkk 1 java generics unchecked-cast

以下代码Unchecked cast: 'T' to 'U'在 IntelliJ IDEA 中生成警告:

interface A {}
class B<T extends A, U extends A> {
    void f() {
        final T t = null;
        final U u = (U) t;
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义,因为TU被定义为相同的类型。问题是什么?

Era*_*ran 5

T并且U未定义为相同类型。它们都定义为extends A,这意味着T并且U可以是实现A接口的无关类。因此演员表是不安全的。

您可以做的唯一安全转换是转换 typeTUtype 的引用A。当然,你不需要这样的演员。您可以简单地将它们分配给类型为 的变量A