2016-01-10 24 views
12

我正在編寫一個代碼生成工具來爲使用Spring-Data-Jpa的Spring引導應用程序生成後端接線代碼,並且它輕度地令我討厭,CrudRepository中的方法返回Iterable而不是List,因爲iterable沒有提供相當的功能,但列表,所以我正在尋找最佳的方式來將迭代轉換爲列表。Spring-Data JPA CrudRepository返回Iterable,是否可以將它轉換爲List?

我看到this post更改一個迭代到一個集合,我想知道,而不是使用像番石榴一樣的庫或實現我自己的函數來執行轉換,爲什麼不只是將它投到List?這樣做我不知道有什麼問題嗎?

編輯: 我問,因爲它是一個代碼工具,使它生成引入第三方庫依賴關係的代碼是不合理的,編寫我自己的函數來執行轉換也不是很合理,因爲它將不得不住在某個地方,我寧願沒有在生成的代碼中。如果有一點難看,一個簡單的演員將會工作,但只是想知道我是否缺少某些東西?

回答

18

不,我認爲沒關係。

儘管List保證是IterableIterable可能不是List。這意味着如果您將Iterable轉換爲List,它可能會在運行時失敗。即使它有效,也不能保證它將來會繼續工作,因爲它可能會在新版本的Spring Data JPA中發生變化,而不會破壞接口的合同。

而不是使用強制轉換,您應該聲明您自己的查詢方法,返回List

40

你提到[spring-data-jpa]所以我想你使用JPA。在這種情況下,使用JpaRepository而不是CrudRepository,其中方法返回List就像您想要的那樣。

+0

很酷。我現在只是看了一下文檔。 JpaRepository擴展了PagingAndSortingRepository,它擴展了擴展Repository的CrudRepository。所以它有點建立在其他人身上。整齊。是的,我認爲最簡潔的解決方案是切換到JpaRepository。 –

+0

簡單而整齊。 – SMUsamaShah

+1

這個不幸的總是不工作。 - >例如,當你使用'PagingAndSortingRepository'時,它從'CrudRepository'繼承。 – eav

相關問題