ジェネリックメソッド
Collections.emptyList()って、ジェネリックメソッドになっているけど、
class Test {
void foo(List<Integer> l) {}
void bar() {
foo(Collections.emptyList());
}
}
これはエラーだ。
E:\tmp>javac Test.java
Test.java:8: foo(java.util.List<java.lang.integer>) (Test 内) を (java.util.List<java.lang.object>) に適用できません
foo(Collections.emptyList());
^
エラー 1 個
自分の理解では、引数にクラストークンを渡してやらないと、ジェネリックメソッドの型パラメータは、決定されないので、この動作は納得が行く。でも、そうすると無引数のemptyList()が、何でジェネリックメソッドになっているんだろうか。と思ったら、以下は、コンパイルできる。警告も出ない。
void bar() {
List<Integer> e = Collections.emptyList();
foo(e);
}
なんだこりゃ。ローカル変数に代入する時は、大丈夫だけど、メソッド引数の場合はダメなの?





