考虑下面的抽象类
public abstract class AbstractAssembler {
public abstract <T extends AbstractValue> void transform(T value);
}
和以下扩展:
public class MyAssembler extends AbstractAssembler {
@Override
public void transform(MyValue value) {
// ...
}
}
使用MyValue
public class MyValue extends AbstractValue {
// ...
}
Eclipse 告诉我: MyAssembler 类型的方法 transform(MyValue) 必须覆盖或实现父类(super class)型方法
为什么这不起作用?
最佳答案
你的 transform()
方法必须覆盖通用抽象 transform()
父类(super class)中的方法,即你应该有类似的东西:
public class MyAssembler extends AbstractAssembler {
@Override
public <T extends AbstractValue> void transform(T value) {
}
}
如果您想使用实际类型(例如 MyValue
)调用它,您应该这样做:
MyValue value = new MyValue();
new MyAssembler().transfer(value);
显式指定类型参数 ( new MyAssembler().<MyValue>transfer(value);
) 是可选的,因为它将由编译器推断。
如果您希望 MyAssember
的 transform
仅与MyValue
一起工作的方法,那么你应该这样做:
public class MyAssembler extends AbstractAssembler<MyValue> {
@Override
public void transform(MyValue value) {
}
}
关于java - 用泛型覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35151208/