gpt4 book ai didi

java - Spring 应用程序的 Java 泛型的绑定(bind)不匹配

转载 作者:行者123 更新时间:2023-11-30 11:39:14 25 4
gpt4 key购买 nike

我正在尝试使用 Spring MVC 创建一个 REST api。我没有为每个 Controller 编写 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>> {}

有了上面的类/接口(interface)定义,我如何声明一个扩展 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>

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

最佳答案

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

您可以使用通配符,因为它是 PagingAndSortingRepository<? extends DomainObject<? extends Serializable>,? extends Serializable>> 的扩展但如果你这样做,那么你在 AbstractController 中可以做的事情就非常有限了。 ,例如,您不能有任何采用域对象 ID 类型参数的方法,因为在一般情况下您不知道该类型是什么。

需要在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> .

关于java - Spring 应用程序的 Java 泛型的绑定(bind)不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com