为什么这个泛型引用不能指向Java中的类似扩展类?
public class HelloWorld{
public static void main(String []args){
Interface<Integer,Object> test = new Test();
System.out.println(test.method(test));
}
}
public interface Interface<A, B extends Object> {
public A method(B param);
}
public class Test implements Interface<Integer,Test> {
private int a = 0;
public Integer method(Test param){
return param.a;
}
}
编译时出现此错误
HelloWorld.java:5: error: incompatible types
Interface<Integer,Object> test = new Test();
^
required: Interface<Integer,Object>
found: Test
1 error
该类Test
实现Interface<Integer,Test>
,并且类型声明为Interface<Integer,Object>
。不允许这种分配,因为泛型是invariant
:
Interface<Integer,Test>
既不是的子类型也不是的超类型Interface<Integer,Object>
。因此,Interface<Integer,Test>
无法分配给Interface<Integer,Object>
。
您可以按以下方式更改赋值语句以使其起作用:
Interface<Integer, ? extends Test> test = new Test();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句