私はSpring-Data-Jpaを使用してSpring-bootアプリケーションのバックエンド配線コードを生成するコード生成ツールを書いています機能しますが、リストはそうなので、私はイテラブルをリストに変換する最良の方法を探しています。
この投稿 コレクションへのイテラブルの変更について見て、Guavaのようなライブラリを使用したり、変換を行う独自の関数を実装したりするのではなく、なぜListにキャストしないのでしょうか?私が知らないことをすることで何か間違ったことはありますか?
編集:コード生成ツールであるため、サードパーティのライブラリへの依存関係を導入するコードを生成することは合理的ではなく、変換を行うために独自の関数を記述することは、どこかに住んでいる必要があるため、本当に合理的ではないため、私は尋ねます生成されたコードにはそれを含めたくない。少しい場合は、単純なキャストが機能しますが、何か足りないものがあるのではないかと思っただけですか?
いいえ、大丈夫だとは思いません。
List
はIterable
であることが保証されていますが、Iterable
はList
ではない場合があります。つまり、Iterable
をList
にキャストすると、実行時に失敗する可能性があります。たとえそれが機能しても、インターフェースの契約を破ることなくSpring Data JPAの新しいバージョンで変更される可能性があるので、今後も機能し続けるという保証はありません。
キャストを使用する代わりに、List
を返す独自のクエリメソッドを宣言する必要があります。
[spring-data-jpa]
だから、JPAを使用すると思います。この場合、JpaRepository
の代わりに CrudRepository
を使用します。メソッドは、希望するList
を返します。
インターフェイスはCrudRepositoryをさらに拡張できます。リストを返す新しいメソッドfindAllを追加するだけです。以下の例のように:
@Repository
public interface DataRepository extends CrudRepository<Data, Long> {
@Override
List<Data> findAll();
}
すべてのリポジトリによって拡張される「抽象」リポジトリがある場合は、このメソッドも追加できるため、すべてのリポジトリに効果があります。以下の例のように:
@NoRepositoryBean
public interface GenericRepository<T> extends CrudRepository<T, Long> {
@Override
List<T> findAll();
}