-3

問題の非常に速い例を次に示します。

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

期待どおり、唯一の値が null である 1 つの要素のリストを返します。

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

1 つの要素のリストを返します。その要素は、null 値のみを持つ Type の配列です。

そのため、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

以下は、John B. が説明した結果を示す JUnit テスト メソッドです。コードは元の質問で述べたように動作せず、一貫性があります。

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 に答える