ideone.com に見られるように、次のコードがあります。
import java.util.*;
class Test{
interface Visitor{
public <T> void visit(T Value);
}
class MyVisitor<T> implements Visitor{
List<T> list = new ArrayList<T>();
public <T> void visit(T value){
list.add(value);
}
}
}
このコードをコンパイルすると、次のエラーが発生します。
Main.java:12: エラー: add(T#1) に適したメソッドが見つかりません list.add(値); ^ メソッド List.add(int,T#2) は適用されません (実引数リストと仮引数リストの長さは異なります) メソッド List.add(T#2) は適用されません (実際の引数 T#1 は、メソッド呼び出し変換によって T#2 に変換することはできません) ここで、T#1、T#2 は型変数です。 T#1 はメソッド visit(T#1) で宣言されたオブジェクトを拡張します T#2 extends Object 宣言されたクラス Test.MyVisitor 1 エラー
問題は、 visit の型 Tが listの同じ T と見なされないことです。このコンパイルの問題を修正するにはどうすればよいですか?