2011-04-10 140 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