Java 是什么导致嵌套泛型中出现未检查的警告?
在方法中使用嵌套泛型时,会出现未选中的警告。为什么呢Java 是什么导致嵌套泛型中出现未检查的警告?,java,generics,compiler-warnings,unchecked,Java,Generics,Compiler Warnings,Unchecked,在方法中使用嵌套泛型时,会出现未选中的警告。为什么呢 package test; public class subc { public static void main(String[] args) { Integer aa[] = new Integer[10]; infunction(aa); // Not Warning , Use genericTest !!!!!!!!!!! Integer[] abc = g
package test;
public class subc {
public static void main(String[] args) {
Integer aa[] = new Integer[10];
infunction(aa);
// Not Warning , Use genericTest !!!!!!!!!!!
Integer[] abc = genericTest(aa, aa.getClass());
@SuppressWarnings("unused")
Integer a = abc[0];
}
public static <T> T[] genericTest(T[] aa, Class<? extends T[]> class1) {
return aa;
}
public static <T> T[] infunction(T[] aa) {
// Warning, Use genericTest( unchecked ) !!!!!!!!!!
T[] result = (T[]) genericTest(aa, aa.getClass());
return result;
}
}
封装测试;
公共课小组{
公共静态void main(字符串[]args){
整数aa[]=新整数[10];
功能失调(aa);
//不警告,使用通用测试!!!!!!!!!!!
整数[]abc=genericTest(aa,aa.getClass());
@抑制警告(“未使用”)
整数a=abc[0];
}
public static T[]genericTest(T[]aa,Class未选中的强制转换是您在代码中看到的显式编写的(T[])
强制转换。T[]
不是可重新定义的类型,因此在运行时不会完全检查对它的强制转换
我猜你在没有强制转换的代码没有编译时添加了强制转换。所以真正的问题是为什么t[]result=genericTest(aa,aa.getClass());
没有编译
这是因为aa.getClass()
返回typeClassWhyClassjust test code,我复制了Arrays.copyOfpublic static T[]copyOf(U[]original,int newLength,Class
public static <T> T[] genericTest(T[] aa) {
return aa;
}