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
答案 0 :(得分:2)
您可以使用T
之类的内容更改通用<T extends AbstractService>
,以便在AbstractService
上调用任何service
方法。
但是,对于您的情况,我并不认为您正在使用仿制药。只需指定抽象方法(例如abstract Object getPage()
并在startServiceCall
方法中调用它),您就会好得多。在这种情况下,您也不需要service
字段,您的具体实例将是您的服务。