在抽象类方法

时间:2017-02-02 20:20:00

标签: java

abstract class AbstractService<T> {
  private final T service;

  public AbstractService(T service) {
    this.service = service;
  }

  startServiceCall() {} // how to specify types

我有一个抽象类,应该处理启动服务调用(这样我可以集中记录等)。

我有一个孩子班:

public class ServiceWrapper extends AbstractService<ConcreteService>

我希望让儿童服务使用startServiceCall

startServiceCall(ConcreteService::getPage, bookId, pageNum)

是否有可能以某种方式在抽象类中指定类型参数,以使startServiceCall中的AbstractService使用T service

我知道一个解决方案是我可以将service变量设为私有并使用service::getPage

1 个答案:

答案 0 :(得分:2)

您可以使用T之类的内容更改通用<T extends AbstractService>,以便在AbstractService上调用任何service方法。

但是,对于您的情况,我并不认为您正在使用仿制药。只需指定抽象方法(例如abstract Object getPage()并在startServiceCall方法中调用它),您就会好得多。在这种情况下,您也不需要service字段,您的具体实例将是您的服务。