我有以下代码as seen in ideone.com:整蛊Java泛型:泛型类实现非通用接口与通用方法
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: error: no suitable method found for add(T#1) list.add(value); ^ method List.add(int,T#2) is not applicable (actual and formal argument lists differ in length) method List.add(T#2) is not applicable (actual argument T#1 cannot be converted to T#2 by method invocation conversion) where T#1,T#2 are type-variables: T#1 extends Object declared in method visit(T#1) T#2 extends Object declared in class Test.MyVisitor 1 error
的问题是在访问的类型T不能视为相同T IN列表。我该如何解决这个编译问题?
这也不会编译 – Andremoniy 2013-04-11 11:32:14
@Andremoniy这个答案解释了OP在替代例子中的代码真的做了什么,当然它也不会编译。 – Pshemo 2013-04-11 11:38:03
如果我不能改变'访客'界面?我将不得不使用原始类型List,因为我无法匹配'T',擦除后'T'会变成'Object'? – 2013-04-11 11:44:32