繁体   English   中英

覆盖Java中的通用方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM