这是一个非常快速的问题示例:
Arrays.asList(new Object[]{null})
返回一个 1 元素列表,其中其唯一值为 null,如预期的那样。
Arrays.asList(new java.lang.reflect.Type[]{null})
返回一个 1 元素列表,其元素是一个 Type 数组,而该数组又只有一个 null 值。
因此,似乎如果我传递一个 Type 对象数组,它不会被 JVM 解释为 vargarg,因此在这种情况下,asList 方法会创建一个将整个数组作为元素的列表。
还有其他事情正在发生...
我写了以下测试:
@Test
public void testAsList() {
List<Object> listO = Arrays.asList(new Object[] { null });
System.out.println(listO.size());
System.out.println(listO.get(0) == null);
List<Type> listT = Arrays.asList(new Type[] { null });
System.out.println(listT.size());
System.out.println(listT.get(0) == null);
}
我得到以下结果:
1
true
1
true
这表明两个调用的行为相同(给出null
单个元素的列表)
这是一个 JUnit 测试方法,演示了 John B. 描述的结果。 该代码的行为与原始问题中所述不同,并且是自洽的。
public void testAsList() {
List<Object> list1 = Arrays.asList(new Object[]{null});
assertSize(1, list1);
assertNull(list1.get(0));
List<java.lang.reflect.Type> list2 = Arrays.asList(new java.lang.reflect.Type[]{null});
assertSize(1, list2);
assertNull(list2.get(0));
}