【发布时间】:2014-07-07 04:20:53
【问题描述】:
我有以下情况,我有类 Class<? extends IModel<?>> aCls 和集合 Collection<? extends IModel<?>> entitiesCollection 并试图将它们传递给方法 <T extends IModel<T>> void doIndex(Class<T> clz, Iterable<T> items) ,但不断收到编译时异常。我尝试了通配符捕获和其他方式,但没有运气。我一定遗漏了一些明显的东西。将不胜感激任何建议。
Multimap<Class<? extends IModel<?>>, IModel<?>> entityMultimap = ArrayListMultimap.create();
for (IModel<?> entity : models) {
Class<? extends IModel<?>> aCls = entity.getClass();
entityMultimap.put(aCls, entity);
}
for (Class<? extends HasKey<?>> cls : entityMultimap.keySet()) {
Collection<? extends IModel<?>> entitiesCollection = entityMultimap.get(cls);
doIndex(cls, entitiesCollection);
}
public static <T extends IModel<T>> void doIndex(Class<T> clz, Iterable<T> items) {
.....
}
更新:有人将此标记为与其他通用通配符相关问题的重复。然而,这是非常不同的情况。我们拥有的是
public static <T extends IModel<T>> void doIndex(Class<T> clz, Iterable<T> items)
其中参数 clz 和基于相同类型 T 的项目。如果我们只有一个参数,可以使用wildcard capture 方法。但是这里我们有通配符变量cls 和entitiesCollection
:
Class<? extends HasKey<?>> cls and
Collection<? extends IModel<?>> entitiesCollection
与clz 和items 具有相似的关系,但我不知道如何将它们传递给doIndex。
【问题讨论】:
-
你的编译错误是什么?
-
这是我什至无法编译的问题。错误:) java: 类 A 中的方法 doIndexFor 不能应用于给定类型;必需:java.lang.Class
,java.lang.Iterable 找到:java.lang.Class >,java.util.Collection > 原因:不存在类型变量 T 的实例,因此参数类型 java.util.Collection > 符合形参类型 java.lang.Iterable