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というのが気に食わないですね。