2017-03-14 70 views
2

我有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) {...} 

但是,當我嘗試調用從012這個方法:

X_class<I, D> x_object = ...  

public D produceDeliver(){ 
     D deliver = x_object.produceDeliver(this); 
     ... 

我得到這個錯誤消息:在類型X_class < I,d>

方法produceDeliver(I)是 不適用於參數(I_class < I,d> )

我不理解I和I_class < I,d>之間的非等價,因爲我延伸I_class < I,d>

+0

什麼是D_class樣子? – Jeff

+0

@Jeff D_class簽名是相同的,以我和X類 – ftkg

+1

誰說'this'的類型是'I'? – shmosel

回答

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類型的。

相關問題