我正在编写一个代码生成工具,使用 Spring-Data-Jpa 为 Spring-boot 应用程序生成后端连接代码,CrudRepository 中的方法返回 Iterable 而不是 List,这让我有点恼火,因为 iterable 提供的还不够功能,但 List 有,所以我正在寻找将可迭代对象转换为列表的最佳方法。
我看到 这篇关于将可迭代对象更改为集合的帖子,我想知道,与其使用像 Guava 这样的库或实现我自己的函数来进行转换,为什么不直接将其转换为 List?这样做有什么我不知道的错误吗?
编辑:我问是因为它是一个代码生成工具,所以让它生成引入对 3rd 方库的依赖的代码是不合理的,并且编写我自己的函数来进行转换也不是很合理,因为它必须存在于某个地方我宁愿在生成的代码中没有它。一个简单的演员就可以工作,如果有点难看,但只是想知道我是否遗漏了什么?
原文由 james_s_tayler 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,我认为这不行。
While a
List
is guaranteed to be anIterable
anIterable
may not be aList
.这意味着如果您确实将Iterable
转换为List
它可能会在运行时失败。即使它可以工作,也不能保证它在未来会继续工作,因为它可能会在新版本的 Spring Data JPA 中发生变化,而不会破坏接口的约定。您应该声明自己的返回
List
的查询方法,而不是使用强制转换。或者,您可以使用
Streamable.of(iterable).toList()
进行转换。 这个答案 还包含一些背景,为什么选择Iterable
作为这些方法的返回类型。