Java 对象到泛型类型转换的未检查警告的定义在哪里?

Java 对象到泛型类型转换的未检查警告的定义在哪里?,java,generics,type-conversion,warnings,javac,Java,Generics,Type Conversion,Warnings,Javac,定义未选中的转换,如下所示: 让G用n个类型参数命名一个泛型类型声明 存在来自原始类或接口类型的未经检查的转换 G到任何形式的参数化类型G 从原始数组类型G[]到格式为G[]的任何数组类型都存在未经检查的转换 使用未检查的转换会导致编译时未检查警告 除非G是一个参数化类型,其中所有类型参数都是 未绑定的通配符,或未选中的警告被 抑制警告注释 据我所知,如果将原始类型转换为具有有界类型参数的泛型类型,则会发生未经检查的转换。那么为什么以下代码会生成未选中的警告: public class Doub

定义未选中的转换,如下所示:

让G用n个类型参数命名一个泛型类型声明

存在来自原始类或接口类型的未经检查的转换 G到任何形式的参数化类型
G

从原始数组类型
G[]
到格式为
G[]
的任何数组类型都存在未经检查的转换

使用未检查的转换会导致编译时未检查警告 除非
G
是一个参数化类型,其中所有类型参数都是 未绑定的通配符,或未选中的警告被 抑制警告注释

据我所知,如果将原始类型转换为具有有界类型参数的泛型类型,则会发生未经检查的转换。那么为什么以下代码会生成未选中的警告:

public class DoubleStar{

    public static void print(Object object){
       ((A<String>)object).print();
    }

    public static void main(String[] args){
        print(new Object());
    }
}

class A<T>{
    public void print(){
        System.out.print("HELLO");
    }
}
公共级双星{
公共静态无效打印(对象){
((A)对象);
}
公共静态void main(字符串[]args){
打印(新对象());
}
}
甲级{
公开作废印刷品(){
System.out.print(“HELLO”);
}
}

由于对象不是原始类型(AFAIK),为什么上面的代码要生成未经检查的强制转换警告,以及在何处定义此行为

因为当您将
对象
强制转换为
A
时,编译器无法检查(或生成要检查的代码)该
对象是否确实是
A
而不是
A
(或其他).

您看到的部分是错误的,这就是为什么在您的示例中它似乎没有意义

您收到的警告是未选中的强制类型转换。您正在查看有关未经检查的转换()的部分

当且仅当S“让G命名泛型类型声明…”对象不是泛型类型声明时,从类型S到类型T的强制转换静态上是正确的。