2016-01-10 11 views
12

Sto scrivendo uno strumento code-gen per generare il codice di back-end per le applicazioni Spring-boot usando Spring-Data-Jpa e mi infastidisce leggermente che i metodi nel CrudRepository restituiscano Iterable piuttosto che List, come iterable non fornisce abbastanza funzionalità, ma List fa, quindi sto cercando il modo migliore per convertire il iterabile in una lista.Spring Data Jude CrudRepository restituisce Iterable, è corretto lanciare questo in Elenco?

Ho visto this post nel modificare un iterabile in una raccolta e mi chiedevo, piuttosto che utilizzare una libreria come Guava o implementare la mia funzione per effettuare la conversione, perché non lanciarlo semplicemente in Elenco? C'è qualcosa di sbagliato nel farlo che non conosco?

Modifica: Modifica: Chiedo perché dal momento che si tratta di uno strumento di codice gen non è ragionevole generare codice che introduce dipendenze su librerie di terze parti e scrivere anche la mia funzione per eseguire la conversione non è davvero ragionevole perché dovrebbe vivere da qualche parte e preferirei non averlo nel codice generato. Un cast semplice funzionerà, se un po 'brutto, ma mi chiedo solo se c'è qualcosa che mi manca?

risposta

18

No, non penso sia OK.

Mentre un List è garantito per essere un Iterable un Iterable potrebbe non essere un List. Ciò significa che se si esegue il cast di un Iterable su un List potrebbe non riuscire in fase di runtime. Anche se funziona, non c'è alcuna garanzia che continuerà a funzionare in futuro in quanto potrebbe cambiare nelle nuove versioni di Spring Data JPA senza rompere il contratto dell'interfaccia.

Invece di utilizzare un cast, è necessario dichiarare i propri metodi di query che restituiscono List.

40

Hai menzionato [spring-data-jpa] quindi suppongo che tu usi JPA. In questo caso usa JpaRepository invece di CrudRepository dove i metodi restituiscono List come desideri.

+0

Freddo. Ho appena dato un'occhiata alla documentazione ora. JpaRepository estende PagingAndSortingRepository che estende CrudRepository che estende il repository. Quindi si basa sugli altri. Neat. Sì, penso che la soluzione più pulita sia passare a JpaRepository. –

+0

Semplice e pulito. – SMUsamaShah

+1

questo sfortunatamente non funziona sempre. -> per esempio quando si utilizza un 'PagingAndSortingRepository' è ereditato dal' CrudRepository'. – eav

Problemi correlati