您的服务是 BaseService 的类型,而不是 CarService。
当您编写 BaseService service = new CarService() 之类的内容时,您无法访问 CarService 的方法,因为您的变量是 BaseService 类型。
您需要将服务类型更改为通用类型,就像您对实体和 dto 所做的那样。
public abstract class BaseController<E,DTO, S extends BaseService> {
protected final S service;
public BaseController(S service) {
this.service = service;
}
// code ....
}
public class CarController extends BaseController<Car, CarDto, CarService> {
public CarController(final CarService service) {
super(service);
service.getName();
}
// code ...
}
BaseController 中的extends BaseService 仅当您想在 BaseController 中使用 BaseService 的任何方法时才需要,例如:
public abstract class BaseController<E,DTO, S extends BaseService> {
protected final S service;
public BaseController(S service) {
this.service = service;
service.doSomething();
service.overrideMe();
}
// code ....
}
public class CarController extends BaseController<Car, CarDto, CarService> {
public CarController(final CarService service) {
super(service);
service.getName();
service.overrideMe();
service.doSomething();
}
// code ...
}
public abstract class BaseService<E, DTO> {
public abstract void overrideMe();
public void doSomething() {
System.out.println("hi");
}
}
@Service
public class CarService extends BaseService<Car, CarDto> {
// code ....
//custom method
public String getName(){
return "Car Sevice";
}
@Override
public void overrideMe() {
System.out.println("Overrided");
}
}
如果您的 BaseController 不需要知道 S 正在扩展 BaseService(您不会在 BaseController 中调用 BaseService 的任何方法),您可以删除 extends BaseService 部分
public abstract class BaseController<E,DTO, S> {
protected final S service;
public BaseController(S service) {
this.service = service;
}
// code ....
}
public class CarController extends BaseController<Car, CarDto, CarService> {
public CarController(final CarService service) {
super(service);
service.getName();
service.overrideMe();
service.doSomething();
}
// code ...
}
public abstract class BaseService<E, DTO> {
public abstract void overrideMe();
public void doSomething() {
System.out.println("hi");
}
}
public class CarService extends BaseService<Car, CarDto> {
// code ....
//custom method
public String getName(){
return "Car Sevice";
}
@Override
public void overrideMe() {
System.out.println("Overrided");
}
}
还要考虑 BaseController 中是否需要 E 和 DTO