在抽象类中,我有方法:Java泛型方法的传承
abstract void method(Holder<?> holder);
和实现类(将有多个类像这样的,每一个都有自己的类型 - SomeClass的,SomeClass2,..):
@Override
void method(Holder<SomeClass> aHolder) {...}
这不起作用,所以我失踪了什么?
有编译器错误: “方法无法从它的超重写方法”
在抽象类中,我有方法:Java泛型方法的传承
abstract void method(Holder<?> holder);
和实现类(将有多个类像这样的,每一个都有自己的类型 - SomeClass的,SomeClass2,..):
@Override
void method(Holder<SomeClass> aHolder) {...}
这不起作用,所以我失踪了什么?
有编译器错误: “方法无法从它的超重写方法”
的一点是,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) {}
}
你试图用一个“更具体的”实施覆盖如果不接受“?”,它只会接受“SomeClass”,因此它会打破与抽象类的“契约”。
它更容易理解,如果你想实现其他类,将与你的类交互。
你希望它接受任何类类型,因为它宣称“?”,但如果只接受“SomeClass的”它会破坏你的系统。
你应该在类级别使用通用的“T”代替,并宣布你正在使用的每个执行的类型。
什么是确切的错误? –
要覆盖addDocs(),而不是()方法 –
对不起,我就来修正一下...... “方法”是实际重写, 的一个但这不是问题 – Dejan