Inizializzazione elenco Java in una riga
Panoramica
In questo breve tutorial, studieremo come inizializzare un elenco utilizzando one-liner.
Ulteriori letture:
Collezioni.emptyList () vs. New List Instance
Guida al Java ArrayList
Creare da un array
Possiamo creare un elenco da un array. E grazie ai letterali dell’array, possiamo inizializzarli in una riga:
Possiamo fidarci del meccanismo varargs per gestire la creazione dell’array. Con questo, possiamo scrivere codice più conciso e leggibile:
L’istanza di risultato di questo codice implementa l’interfaccia List, ma non è un java.util.,ArrayList o un LinkedList. Anziché, si tratta di una lista sostenuta dalla matrice originale, che ha due implicazioni che vedremo nel resto di questa sezione.
Sebbene il nome della classe sia ArrayList, è in java.util.Pacchetto Array.
2.1. Dimensione fissa
L’istanza risultato da array.asList avrà una dimensione fissa:
2.2. Riferimento condiviso
L’array originale e l’elenco condividono gli stessi riferimenti agli oggetti:
Crea da un flusso (Java 8)
Possiamo facilmente convertire un Flusso in qualsiasi tipo di Raccolta.,
Pertanto, con i metodi di fabbrica per i flussi, possiamo creare e inizializzare elenchi in una riga:
Dovremmo notare qui che i collezionisti.ToList () non garantisce l’esatta implementazione della lista restituita.
Non esiste un contratto generale sulla mutabilità, serializzabilità o sicurezza del thread dell’istanza restituita. Quindi, il nostro codice non dovrebbe fare affidamento su nessuna di queste proprietà.
Alcune fonti evidenziano quel Flusso.di(…).collect (…) può avere un ingombro di memoria e prestazioni maggiore rispetto agli array.asList()., Ma in quasi tutti i casi, è una tale micro-ottimizzazione che c’è poca differenza.
Metodi di fabbrica (Java 9)
JDK 9 introduce diversi metodi di fabbrica convenienti per le raccolte:
Un dettaglio importante è che le istanze restituite sono immutabili. Oltre a ciò, i metodi di fabbrica presentano diversi vantaggi in termini di efficienza dello spazio e sicurezza del filo.
Questo argomento è esplorato di più in questo articolo.,
Inizializzazione a doppia parentesi graffa
In diversi punti, possiamo trovare un metodo chiamato inizializzazione a doppia parentesi graffa, che assomiglia a questo:
Il nome “inizializzazione a doppia parentesi graffa” è abbastanza fuorviante. Mentre la sintassi può sembrare compatta ed elegante, nasconde pericolosamente ciò che sta succedendo sotto il cofano.
In realtà non esiste un elemento di sintassi a doppia parentesi in Java; questi sono due blocchi formattati intenzionalmente in questo modo.
Con le parentesi esterne, dichiariamo una classe interna anonima che sarà una sottoclasse di ArrayList., Possiamo dichiarare i dettagli della nostra sottoclasse all’interno di queste parentesi.
Come al solito, possiamo usare i blocchi di inizializzazione delle istanze, ed è da qui che proviene la coppia interna di parentesi graffe.
La brevità di questa sintassi è allettante. Però, è considerato un anti-pattern.
Per saperne di più sull’inizializzazione a doppia parentesi graffa, dai un’occhiata al nostro articolo qui.
Conclusione
Java moderno offre diverse opzioni per creare una raccolta in una riga. Il metodo che scegliamo è quasi interamente dovuto alle preferenze personali piuttosto che al ragionamento tecnico.,
Un importante takeaway è che, anche se sembra aggraziato, l’anti-pattern dell’inizializzazione anonima della classe interna (aka double brace) ha molti effetti collaterali negativi.
Come sempre, il codice è disponibile su GitHub.
Inizia con Spring 5 e Spring Boot 2, attraverso il corso Learn Spring:
>>CONTROLLA IL CORSO