我有一个非常简单的不是null检查器,该检查器具有类型对象的varargs参数
public static void nonNull(Object... objects) {
//...
}
当我使用任何类型的多维数组调用时,例如:
nonNull(new int[][] {})
或
nonNull(new Object[][] {})
它导致编译器警告说" varargs的不精确类型匹配"。它也发生在2个以上的数组中。
警告没有显示示例:
nonNull(new Object[] {})
或
nonNull(new Object())
我只是好奇为什么。多维阵列只是另一个对象,就像常规阵列不是吗?那么,为什么类型匹配不精确?
如果向varargs方法提供单个Object[]
,它将直接用作objects
参数,而不是包裹在长度-1数组中。
new int[][]{}
和new Object[][]{}
技术由于数组协方差而算作类型Object[]
。
因此,对于nonNull(new int[][] {})
和nonNull(new Object[][] {})
,您提供的数组将直接用作objects
,而不是通过作为长度-1 Object[]
的唯一元素。
很可能您不希望发生这种情况,因此Java向您发出警告。