java - 从通用类型到相同类型的未经检查的转换

标签 java generics unchecked-cast

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

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

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

最佳答案

TU 未定义为同一类型。它们都定义为extends A,这意味着TU可以是实现A接口(interface)的无关类.因此类型转换是不安全的。

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

关于java - 从通用类型到相同类型的未经检查的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60165445/

相关文章:

android - 有没有办法在不使用 Kotlin 中的 Supress 的情况下处理未经检查的强制转换警告?

java - 测试套件在 JUnit5 中是否被认为已弃用?

java - 使用 java 捕获 perl 输出

.net - .NET 中可以使用通用 BitConverter.GetBytes 吗?

java - 返回作为方法参数给出的类型列表?

Java - 使用 WatchEvent 抑制未经检查的转换警告是否安全?

java - 使用泛型无需强制转换观察者模式

java - 如何在窗口关闭时关闭 JavaFX 应用程序?

java - 有效地最终与最终 - 不同的行为

java - Lambda 表达式和泛型仅在方法中定义