2

我正在尝试使用 Spring MVC 创建一个 REST api。我没有为每个控制器编写 CRUD 方法,而是创建了一个抽象类来处理典型的 REST CRUD 场景。所以我创建了以下这些类

public interface DomainObject<ID extends Serializable> {}

public class Apps implements DomainObject<String>{}

public interface AppsRepository extends PagingAndSortingRepository<Apps, String> {}

public abstract class AbstractController<T extends PagingAndSortingRepository<DomainObject<Serializable>, Serializable>> {}

使用上面的类/接口定义,我如何声明一个扩展 AbstractController 的类?

我尝试使用声明 AppsController

public class AppsController extends AbstractController<AppsRepository>{}

没有任何运气。Eclipse 显示以下错误

Bound mismatch: The type AppsRepository is not a valid substitute for the bounded parameter <T extends PagingAndSortingRepository<DomainObject<Serializable>,Serializable>> of the type AbstractController<T>

我完全被困住了。我已经尝试了一段时间没有任何运气的不同方法。任何帮助将不胜感激。

4

1 回答 1

1

同样, asList<String>不是 的子类型List<Object>PagingAndSortingRepository<Apps, String>(因此AppsRepository)不是 的子类型PagingAndSortingRepository<DomainObject<Serializable>, Serializable>

PagingAndSortingRepository<? extends DomainObject<? extends Serializable>,? extends Serializable>>您可以AbstractController使用通配符,因为它是在一般情况下不知道该类型是什么。

您需要在以下位置声明相关类型变量AbstractController

public abstract class AbstractController<IDT extends Serializable, KT extends Serializable,
    Dom extends DomainObject<IDT>, T extends PagingAndSortingRepository<Dom, KT>> {

  private T repository;

  public AbstractController(T repository) {
    this.repository = repository;
  }

  public Dom get(IDT objectId) {
    return repository.get(objectId);
  }
}

并使AppsController扩展AbstractController<String, String, Apps, AppsRepository>

于 2012-11-14T09:03:04.310 回答