java - 未经检查的类型转换和泛型类

标签 java generics

我有一个类:

public class SomeClass <TView extends View>{

    private TView tv;

    public SomeClass(View v){
        tv=(TView) v; //unchecked cast warning
    }

}

View 是一个具体的类(不是抽象的,不是接口(interface))。

问题是

即使 TView 扩展了 View,为什么我会收到未经检查的转换警告?

最佳答案

在运行时不强制转换。

你的课后- erasure看起来像:

public class SomeClass {

    private View tv;  // Post-erasure, TView -> View

    public SomeClass(View v){  // Post-erasure, TView -> View
        tv=(View) v; //unchecked cast warning due to cast of View to View
    }

}

请注意,删除后,构造函数正在转换类型为 View 的值输入 View因为这是 <TView extends View> 的下限.

类型转换 ViewView不会在运行时检查任何内容,这就是您收到警告的原因。

关于java - 未经检查的类型转换和泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9218238/

相关文章:

java - java 模块中的 Lombok 有助于 apk 中的方法计数

java - 检查当前时间是午夜还是 Joda Time 的第二天?

java - SQLite如何覆盖相同的数据

java - 泛型继承

Swift:带有回调的泛型

java - 如何在 Spring 3 中使用 Velocity Tools 获取 VelocityEngine

java - 为什么 Java 在 Map 中没有 putIfAbsent(key, supplier) 方法?

arrays - 带有协议(protocol)的 Swift 泛型数组

c++ - 为什么 Boost Graph Library 的 `source()` 是一个全局函数?

c# - 从未知类调用方法