ite*_*tor 7 java generics nested-generics
以下小Java示例将无法编译为不明原因:
package genericsissue;
import java.util.ArrayList;
import java.util.List;
interface Attribute<V> {}
interface ListAttribute extends Attribute<List<?>> {}
public class Context {
public <T, A extends Attribute<T>> void put(Class<A> attribute, T value) {
// implementation does not matter for the issue
}
public static void main(String[] args) {
Context ctx = new Context();
List<?> list = new ArrayList<String>();
ctx.put(ListAttribute.class, list);
}
}
Run Code Online (Sandbox Code Playgroud)
带有ctx.put的行会产生以下错误:
Context.java:18: <T,A>put(java.lang.Class<A>,T) in genericsissue.Context cannot be applied to (java.lang.Class<genericsissue.ListAttribute>,java.util.List<capture#35 of ?>)
Run Code Online (Sandbox Code Playgroud)
如果没有通配符工作,属性模式工作正常.
是否有任何解释为什么编译器不接受通配符键入的值?
代替
public <T, A extends Attribute<T>>
Run Code Online (Sandbox Code Playgroud)
和
public <T, A extends Attribute<? super T>>
Run Code Online (Sandbox Code Playgroud)