鉴于以下设想的例子:
public class Child extends Parent<Child, String> () {}
public class Parent<E extends Parent, V> {
public V value;
// maps <List of Entities> to <List of Values>
public List<V> filterValues(List<E> entities) {
List<V> values = new ArrayList();
for (E entity : entities) {
values.add(entity.value); // compiler error: add(V) cannot be
// applied to (java.lang.Object)
}
return values;
}
}
我不完全理解这个错误的本质。 List<V>
是否已解析为List<Object>
?如何解决将特定类型映射到其关联字段的问题?
答案 0 :(得分:5)
如果我正确理解您要执行的操作,您似乎希望将Parent
声明为class Parent<E extends Parent<?,V>, V>
。
它会编译,但不知道这个设计的目的,很难进一步评论它的用处。我的直觉和#34;是你在认真地过度思考......一个直接的想法是为什么不用filterValues
而不是整个类来参数化E
:
class Parent<V> {
public <E extends Parent<V>> List<V> filterValues(List<E> entities) {
....
}
}
答案 1 :(得分:1)
public class Parent<E extends Parent, V>
与E
绑定Parent
,这是一种原始类型。当您访问entity
的任何方法或字段时,因为它的类型E
受删除类型限制,您将获得Parent
的删除类型;特别是V
是Object
。因此错误。