當我在方法中使用嵌套泛型時,有一個未經檢查的警告。這是爲什麼?什麼會導致嵌套泛型中未經檢查的警告?
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;
}
}
如果我修改的方法,也沒有警告:
public static <T> T[] genericTest(T[] aa) {
return aa;
}
那麼,爲什麼我得到的第一個代碼塊的警告,而不是第二個?
爲什麼'Class <?擴展T []>'?你可以說'Class extends T>'或者更好的'Class'(在你的'genericTest'方法中)。 (複製代碼) –
2014-09-01 08:51:01
只是測試代碼,並且我複製了,Arrays.copyOf – 2014-09-01 09:10:20
public static T [] copyOf(U [] original,int newLength,Class <?extends T []> newType) newType ==(Object)Object []。class) ? (T [])new Object [newLength] :(T [])Array.newInstance(newType.getComponentType(),newLength); System.arraycopy(original,0,copy,0, Math.min(original.length,newLength)); return copy; } 我只是改變簡單的情況 –
2014-09-01 09:10:55