【发布时间】:2016-02-11 02:22:46
【问题描述】:
我最近开始使用 Java,但在处理泛型类型时仍然感到困惑。以下是我遇到一些问题的简化场景。
我有一个类,其中包含一个使用类类型作为键的 Map 和该类对象的集合:
public class GenericListInside {
private Map<Class<?>, List<?>> mapping = new HashMap<>();
public <T> void addListing(Class<T> clazz, List<T> object) {
mapping.put(clazz, object);
}
}
我可以毫无问题地调用 addListing:
GenericListInside gli = new GenericListInside();
List<Foo> list = new ArrayList<>();
//add something to list
gli.addListing(Foo.class, list);
现在我决定创建一个类来提供流畅的界面。比如:
with(Foo.class).use(list);
然后我来了:
public class FluidInserter<T> {
Class<T> clazz;
GenericListInside gli = new GenericListInside();
public FluidInserter with (Class<T> clazz) {
this.clazz = clazz;
return this;
}
public <T> void use(List<T> list) {
gli.addListing(clazz, list);
}
}
但是当我尝试编译时,我得到:
错误:(18, 12) java: 类 util.GenericListInside 中的方法 addListing 不能应用于给定类型;
必需:java.lang.Class,java.util.List
找到:java.lang.Class,java.util.List
原因:推断类型不符合等式约束
推断:T
等式约束:T,T
这条消息有点令人困惑......谁能弄清楚我做错了什么?
【问题讨论】: