可変長引数の例を調べるのに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の実装は固定長みたいですね。うーん、紛らわしい。。。