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