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()
返回type
ClassWhy
Classjust test code,我复制了Arrays.copyOfpublic static T[]copyOf(U[]original,int newLength,Class
public static <T> T[] genericTest(T[] aa) {
    return aa;
}