2017-09-14 231 views
2

让我先说明我的情况:JAVA:泛型类继承和泛型类型继承

我已经在第三方SDK,与通用型基类:

public abstract class BaseClass<T extends BaseDataType> { 
    public abstract class BaseDataType {xxx} 
    public abstract int getCount(); 
    public abstract someMethod(T t); 
} 

在我商业环境,它延伸BaseClass如下:

​​ 在真正的商业

,我写我的课:

public class MyClass extends MyGeneralBaseClass<MyDataType> { 
    @Override public someMethod(MyDataType type) {xxx} 
} 

public class MyDataType extends BaseClass.BaseDataType { 
    xxx 
} 

但代码无法编译。对不起,我旅行,我没有我的IDE和开发工具,所以我不能粘贴错误。但我认为如果你在一个IDE这样的IntelliJ Idea中写下来,它会给我遇到的错误。

那么如何编写这种情况:继承泛型类型,并继承使用泛型类的类。

我想要的是,MyClass使用具体类MyDataType而不是摘要BaseDataType

回答

2

看来MyGeneralBaseClas应该有一个泛型类型参数与同类型绑定为BaseClass

public abstract class MyGeneralBaseClas<T extends BaseDataType> extends BaseClass<T> { 
    @Override public int getCount() {return some_list.size()}; 
    @Override public abstract someMethod(T t); 
} 
+0

这正是我想要的。你会请我帮忙详细解释一下吗?或者提供一些易于理解的文章网址。很多thx –

+0

@McArthorLee基于'class MyClass extends MyGeneralBaseClass '我想你'MyGeneralBaseClas'有一个扩展'BaseDataType'的泛型类型参数。因此'MyGeneralBaseClas '。现在,由于'BaseClass'还需要一个扩展'BaseDataType'的类型参数,因此可以将'T'传递给它,从而为您提供'class MyGeneralBaseClas extends BaseClass ' – Eran

+0

yes,you are right。但你的解释是关于我的商业环境。你可以给一些通用的JAVA解释。 thx –

0

你可以做到这一点有两种方式:

  1. 通过使用BaseDataType类按原样例如:

    abstract class MyGeneralBaseClas<T extends BaseDataType> extends BaseClass<T> { 
        @Override public void someMethod(T t){} 
    } 
    
  2. 通过扩展BaseDataType类,例如:

    class DerivedDataType extends BaseDataType{ 
        //Some code 
    } 
    
    abstract class MyAnotherBAseClass<DerivedDataType> extends BaseClass{ 
        @Override 
        public void someMethod(com.gamesys.application.BaseDataType t) {} 
    } 
    
+0

当我扩展'BaseDataType',这意味着我在商业环境,所以我必须定义一个具体的类而不是抽象的。 –

+0

我已经得到了答案。无论如何。 –