Spring-Data JPA CrudRepository 返回 Iterable,可以将其转换为 List 吗?

新手上路,请多包涵

我正在编写一个代码生成工具,使用 Spring-Data-Jpa 为 Spring-boot 应用程序生成后端连接代码,CrudRepository 中的方法返回 Iterable 而不是 List,这让我有点恼火,因为 iterable 提供的还不够功能,但 List 有,所以我正在寻找将可迭代对象转换为列表的最佳方法。

我看到 这篇关于将可迭代对象更改为集合的帖子,我想知道,与其使用像 Guava 这样的库或实现我自己的函数来进行转换,为什么不直接将其转换为 List?这样做有什么我不知道的错误吗?

编辑:我问是因为它是一个代码生成工具,所以让它生成引入对 3rd 方库的依赖的代码是不合理的,并且编写我自己的函数来进行转换也不是很合理,因为它必须存在于某个地方我宁愿在生成的代码中没有它。一个简单的演员就可以工作,如果有点难看,但只是想知道我是否遗漏了什么?

原文由 james_s_tayler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 818
2 个回答

不,我认为这不行。

While a List is guaranteed to be an Iterable an Iterable may not be a List .这意味着如果您确实将 Iterable 转换为 List 它可能会在运行时失败。即使它可以工作,也不能保证它在未来会继续工作,因为它可能会在新版本的 Spring Data JPA 中发生变化,而不会破坏接口的约定。

您应该声明自己的返回 List 的查询方法,而不是使用强制转换。

或者,您可以使用 Streamable.of(iterable).toList() 进行转换。 这个答案 还包含一些背景,为什么选择 Iterable 作为这些方法的返回类型。

原文由 Andy Wilkinson 发布,翻译遵循 CC BY-SA 4.0 许可协议

您提到 [spring-data-jpa] 所以我猜您使用的是 JPA。在这种情况下,使用 JpaRepository 而不是 CrudRepository 方法返回 List 就像你想要的那样。

原文由 Robert Niestroj 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题