java - 为什么原始类型转换不会在 Java 中产生警告?

标签 java generics

我原以为下面的代码会产生 rawtype 警告,但它没有:

public class Test {
    public void exampleMethod(Object object){
        if(object instanceof Collection){
            Collection<?> coll = (Collection) object;
            System.out.println(coll);
        }
    }
}

为什么原始类型转换不生成警告?

最佳答案

警告的目的是通知您泛型类型断言实际上并未由编译器或运行时强制执行,因此您可能会在代码中进一步得到 ClassCastExceptions。

因为 ?在左侧,您没有使用已删除的类型,因此 Actor 不必假装检查已删除的类型。由于未检查类型信息,此行不会在以后导致运行时错误。因此无需警告。

Collection<?> ,当你把东西拿出来时,你会得到一个 Object .那不会失败(因为您可能得到的所有东西都是 Object )。

并且您不能将任何内容放入 Collection<?> 中.这样也不会导致错误。

关于java - 为什么原始类型转换不会在 Java 中产生警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33883008/

相关文章:

java - 使用泛型方法替代重载?

c# - 对继承泛型类型的反射(reflection)

c# - 可为空的通用对象集合

sql - 处理不断变化的 Excel 表结构以导入数据库表

java - 如何在 Java 应用程序中导入重复的包结构和类

java - 在庞大的java代码库中查找执行流程

java - netty中如何在断开连接后自动连接到TCP服务器

.net - 如何在 .NET 中使用 Reflection 区分封闭类型参数和嵌套类型参数?

java - Android studio Java - map 上的底页 View

java - Spring MVC @NumberFormat 带小数的百分比