泛型类型参数和方法调用

时间:2017-03-14 21:29:22

标签: java

我有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;

1 个答案:

答案 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类型。

相关问题