让我先说明我的情况:
我在第三方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
。
答案 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)
您可以通过两种方式实现:
按原样使用BaseDataType
类,例如:
abstract class MyGeneralBaseClas<T extends BaseDataType> extends BaseClass<T> {
@Override public void someMethod(T t){}
}
通过扩展BaseDataType
类,例如:
class DerivedDataType extends BaseDataType{
//Some code
}
abstract class MyAnotherBAseClass<DerivedDataType> extends BaseClass{
@Override
public void someMethod(com.gamesys.application.BaseDataType t) {}
}