-3

这是一个非常快速的问题示例:

Arrays.asList(new Object[]{null})

如预期的那样,返回一个唯一值为 null 的 1 元素列表。

Arrays.asList(new java.lang.reflect.Type[]{null})

返回一个 1 元素列表,其元素是一个类型数组,而类型数组又只有一个空值。

因此,似乎如果我传递一个 Type 对象数组,它不会被 JVM 解释为 vargarg,因此在这种情况下, asList 方法会创建一个将整个数组作为元素的列表。

4

2 回答 2

3

其他事情正在发生...

我写了以下测试:

@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

于 2013-09-18T11:33:37.417 回答
1

这是一个 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));
}
于 2013-09-18T11:51:32.107 回答