[英]Overridding a generic method in java
我在一个抽象类中定义了一种方法,如下所示:
public abstract class AbstractService {
protected abstract <T> Message<T> executeService(Message<T> msg)
throws ServiceException;
}
我想在一个具体的子类中实现此方法,如下所示:
public class RescheduleInfoAdaptor extends AbstractService {
@Override
protected Message<RescheduleInfo> executeService(Message<RescheduleInfo> msg)
throws ServiceException {
//implementation goes here
}
}
但是编译器报告错误说
The method executeService(Message<RescheduleInfo>) of type RescheduleInfoAdaptor must override or implement a supertype method
谁能建议我如何在子类中以所需类型实现超类方法?
您有两种选择:
要么
RescheduleInfo
(或一些具体的超RescheduleInfo
,像AbstractInfo
) 例如:
protected abstract <T extends RescheduleInfo> Message<T> executeService(Message<T> msg)
throws ServiceException;
但是,请注意,这将编译,但会生成“类型安全”警告。
要么
AbstractService
通用,并删除抽象方法的type-parameter。 例如:
public abstract class AbstractService<T> {
protected abstract Message<T> executeService(Message<T> msg)
throws ServiceException;
}
然后,在另一堂课中,您将拥有:
public class RescheduleInfoAdaptor extends AbstractService<RescheduleInfo> {
@Override
protected Message<RescheduleInfo> executeService(Message<RescheduleInfo> msg)
throws ServiceException {
//implementation goes here
}
}
像这样尝试:
public abstract class AbstractService<T> {
protected abstract Message<T> executeService(Message<T> msg)
和
public class RescheduleInfoAdaptor extends AbstractService<RescheduleInfo> {
你需要改变这个
protected abstract <T> Message<T> executeService(Message<T> msg)
对此
protected abstract <T extends Something> Message<T extends Something> executeService(Message<T extends Something> msg)
某物是RescheduleInfo
的超类
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.