2007年9月22日土曜日

java genericsの型パラメータ

Collections.emptyList()の戻り値を、そのまま別のメソッドに渡そうとしたら駄目だった。
面倒くさいなー。戻り値が使われるメソッドの引数の型から、型を推論できないものかな?
下に書いたとおり、returnなら大丈夫なのに。

import java.util.*;
public class Main {
  static class A {}
    public static void test(List<A> a) {}
    public static List<A> getEmptyList() {
      return Collections.emptyList();
    }
    public static void main(String[] args) {
      test(Collections.emptyList());            // これはList<Object>と判断されるので駄目
      List<A> a = Collections.emptyList(); // 一回代入して推論させれば出来る。
      test(a);                                              // 最適化されるだろうけど書くのが面倒くさい
      test(getEmptyList());                        // こんなのはできる
    }
}



0 件のコメント:

コメントを投稿