2011-04-10 143 views
3

我有2種不同類型的數據管理者,一個繼承了其他和都仰賴的基礎數據類,看起來像這樣:Java泛型繼承

public abstract class BaseDataType { 
    ... 
} 

public class BaseManager<DataType extends BaseDataType> implements ListModel{ 
    ... 
    public final DataType get(index i){ 
     return dataList.get(i); 
    } 
    ... 
} 

public class BaseSQLManager<DataType extends BaseDataType, Adapter extends SQLAdapter> 
    extends BaseManager<DataType>{ 
    ... 
} 

我的理解是使用BaseSQLManager m =new BaseSQLManager<Property, PropertSQLAdapter>();會允許我使用Property p = m.get(i);但是我被告知get方法返回BaseDataType。

我確定我在這裏錯過了一些小東西,我無法弄清楚。解釋爲什麼這不起作用真的有幫助。由於

回答

3
BaseSQLManager m =new BaseSQLManager<Property, PropertSQLAdapter>(); 

是的,你缺少的變量聲明的類型參數,即m類型不限制類型參數,這就是爲什麼得到()只被返回的東西延伸BaseDataType。它應該是:

BaseSQLManager<Property, PropertSQLAdapter> m 
    = new BaseSQLManager<Property, PropertSQLAdapter>(); 
+0

當然,它看起來很尷尬,我看不到樹林裏的木頭。非常感謝,我會盡快接受你的回答 – Meberem 2011-04-10 12:16:14