JAVA:泛型类继承和泛型类继承

时间:2017-09-14 07:56:30

标签: java generic-type-argument

让我先说明我的情况:

我在第三方SDK中使用了泛型类型的基类:

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

在我的商业环境中,它扩展BaseClass如下:

public abstract class MyGeneralBaseClas<`how to write this???`> extends BaseClass {
    @Override public int getCount() {return some_list.size()};
    @Override public abstract someMethod(`how to write this???`);
}

在实际业务中,我写了我的课:

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 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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) {}
    }