ワイルドカードを使ったイミュータブル

色々検索していたら、ワイルドカードを使ったイミュータブルという面白そうな話題を見つけた。以下で紹介されている本は、洋書の『Java Generics And Collections』という本みたいだが結構面白そう。

import java.util.*;

class test {
    public static void main(String[] args) {
        List<Integer> L = Arrays.asList(1, 2, 3);
        L.add(4);
    }
}

/* 実行結果 */
>java test
Exception in thread "main" java.lang.UnsupportedOperationException
        at java.util.AbstractList.add(AbstractList.java:131)
        at java.util.AbstractList.add(AbstractList.java:91)
        at test.main(test.java:6)

上記の記事ではわざわざワイルドカードを使うことによってイミュータブルを実現しているらしいが、上のサンプルコードではL.add(4)でエラー。工夫しなくてもイミュータブルになっている。asList()のAPIリファレンスを読むと「指定された配列に連動する固定サイズのリストを返します」と書いてある。バージョンが6.0から変更になったのだろうか?