我正在编写一个代码生成工具来使用Spring-Data-Jpa为Spring启动应用程序生成后端连接代码,而且我很温和地告诉我CrudRepository中的方法返回Iterable而不是List,因为iterable不能提供足够的功能,但List,所以我正在寻找将iterable转换为列表的最佳方法.
我看到这篇关于将迭代更改为集合的帖子我想知道,为什么不将它转换为List,而不是使用像Guava这样的库或实现我自己的函数来进行转换?这样做我不知道有什么问题吗?
编辑:我问,因为它是一个代码生成工具,使它生成引入第三方库依赖的代码是不合理的,编写我自己的函数来进行转换也不合理,因为它必须住在某个地方而且我宁愿在生成的代码中没有它.一个简单的演员会有用,如果有点难看,但只是想知道是否有我遗失的东西?
你提到过[spring-data-jpa]
,我猜你使用JPA.在这种情况下,使用JpaRepository
而不是像你想要的那样CrudRepository
返回方法List
.
不,我认为没关系.
虽然a List
保证是Iterable
一个Iterable
可能不是一个List
.这意味着如果你转换Iterable
为a,List
它可能会在运行时失败.即使它有效,也不能保证它将来会继续工作,因为它可能会在新版本的Spring Data JPA中发生变化,而不会破坏接口的合同.
您应该声明自己的返回查询方法,而不是使用强制转换List
.
您的界面仍然可以扩展CrudRepository,您只需添加一个新方法findAll返回一个列表.如下例:
@Repository public interface DataRepository extends CrudRepository { @Override List findAll(); }
如果您有一个"抽象"存储库要由所有存储库扩展,您也可以添加此方法,因此它将对您的所有存储库生效.如下例:
@NoRepositoryBean public interface GenericRepositoryextends CrudRepository { @Override List findAll(); }