在抽象类中我有方法:
abstract void method(Holder<?> holder);
在实现类中(会有多个像这样的类,每个类都有自己的类型 - SomeClass、SomeClass2,..):
@Override
void method(Holder<SomeClass> aHolder) {...}
这不起作用,那么我错过了什么?
有编译器错误: “方法不会覆盖其父类(super class)中的方法”
最佳答案
重点是 void method(Holder<?> holder)
的实现需要能够接受以下任何一个:Holder<SomeClass>
, Holder<SomeClass2>
, Holder<Void>
等等
如果您尝试将该方法声明为 void method(Holder<SomeClass> holder)
在子类中,这意味着您可以调用持有者上的提供程序方法(例如 SomeClass value = holder.get()
),但如果参数实际上是 Holder<Void>
类型,则这会失败并出现类转换异常。 ,例如。
因此,类型系统禁止这样做。
您需要在类级别有一个类型变量:
abstract class BaseClass<T> {
abstract void method(Holder<T> aHolder);
}
然后你可以创建具体的类:
class SomeClassBaseClass extends BaseClass<SomeClass> {
@Override void method(Holder<SomeClass> aHolder) {}
}
关于Java泛型方法继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36860197/