北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

もう一つの"ArrayList"

可変長引数の例を調べるのにJava SEのコードを漁っていたんですが、java.util.Arraysで以下のようなメソッドに出会いました。

    public static <T> List<T> asList(T... a) {
	return new ArrayList<T>(a);
    }

ところが、java.util.ArrayListのコンストラクタは、Collectionかintしか取りません。aは可変長だから配列Tでは?? もしやTはCollection<T>と同値なのかとコンパイルしてみたんですが、ダメでした。まさか、このソースが嘘で、実際はネイティブな実装してるとか、勝手に疑ってみたりもしましたが、そんなわけもなく。

小一時間悩んでふと下を見ると、内部クラスでArrays$ArrayListが居ました。こいつか; ̄ロ ̄)!!
eclipseも騙されてjava.util.ArrayListのソースを開いてましたorz *1

Arrays$ArrayListの実装は固定長みたいですね。うーん、紛らわしい。。。

*1: 自宅のeclipseはきちんと内部クラス開きました。環境によるのかな?