java.lang.reflect.Type 数组未正确解析为 vararg



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

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));
}

相关内容

最新更新