我有I_class
类型参数I和D:
class I_class<I extends I_class<I,D>, D extends D_class<I,D>>
我的X_class
也有相同的类型参数:
class X_class<I extends I_class<I,D>, D extends D_class<I,D>>
X_class
的方法有:
public D produceDeliver(I item) {...}
但是当我尝试从I_class
调用此方法时:
X_class<I, D> x_object = ...
public D produceDeliver(){
D deliver = x_object.produceDeliver(this);
...
我收到此错误消息:
X_class&lt;类型的方法produDeliver(I)我,D&gt;是 不适用于参数(I_class&lt; I,D&gt;)
我不理解I和I_class之间的不等价&lt; I,D&gt ;,因为我扩展了I_class&lt;我,D&gt;
答案 0 :(得分:2)
具有更具体名称的示例可能会有所帮助:
class Building<B extends Building<B, X>, X extends Thing<B, X>> {
Shop<B,X> s = new Shop<>();
X makesError = s.getLocation(this);
}
class Shop<S extends Building<S, X>, X extends Thing<S, X>> {
public X get_location(S shop) {...}
}
问题是当你调用getLocation时,你传递的是一个类型为Building的参数。并非所有类型的实例都是Shop类型。