asList

これはJava Puzzlers Advent Calendar 2016 12/23の投稿です。

問題

public class Main {
    public static void main(String[] args) {
        List list  = new ArrayList();
        List list2 = Arrays.asList();
        System.out.println(list.getClass() == list2.getClass());
    }
}

Q.実行後の標準出力の内容はどっち?
1.true
2.false





















答え

A.false

解説

指定された配列に連動する固定サイズのリストを返します。返されたリストへの変更は、そのまま配列に書き込まれます。 Arrays (Java Platform SE 6)

いったい具象クラスはどのようになっているのでしょうか。

public class Main {
    public static void main(String[] args) {
        List list  = new ArrayList();
        List list2 = Arrays.asList();
        System.out.println(list.getClass() == list2.getClass());

        System.out.println(list.getClass());
        System.out.println(list2.getClass());
    }
}
false  
class java.util.ArrayList  
class java.util.Arrays$ArrayList

asListがjava.uti.ArrayListを返さないというのは自明、この問題は簡単だと言われそうですが(まさにそう)、
後者は隠蔽されているとはいえ、名前がどちらともArrayListというのが気に食わないですね。