考虑以下抽象类
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)必须覆盖或实现超类型方法
为什么这不起作用?
答案 0 :(得分:5)
您的transform()
方法必须覆盖超类中的通用抽象transform()
方法,即您应该具有以下内容:
public class MyAssembler extends AbstractAssembler {
@Override
public <T extends AbstractValue> void transform(T value) {
}
}
如果你想用实际类型(例如MyValue
)调用它,你应该这样做:
MyValue value = new MyValue();
new MyAssembler().transfer(value);
显式指定type-parameter(new MyAssembler().<MyValue>transfer(value);
)是可选的,因为它将由编译器推断。
如果您希望MyAssember
的{{1}}方法仅使用transform
,那么您应该这样做:
MyValue