L'ultima revisione di Java introduce alcune sintassi utili per i record, tra gli altri miglioramenti.

Il mondo della programmazione Java è in continua evoluzione e richiede di rimanere aggiornati per eccellere nel proprio mestiere.

Java 21 offre un'ondata di entusiasmanti miglioramenti che rivoluzionano il modo in cui affronti la concorrenza, le operazioni di raccolta e il lavoro con i record.

Introduzione ai thread virtuali

La scalabilità delle applicazioni server ha sempre presentato sfide, con i thread che spesso diventano colli di bottiglia. Il numero limitato di thread, combinato con frequenti attese di eventi o blocchi da sbloccare, ostacola le prestazioni complessive.

In passato, affrontare questo problema comportava l'uso di costrutti come Futuro Completabile O strutture reattive, risultando in un codice contorto difficile da comprendere e gestire.

Fortunatamente, Java 19 ha introdotto i thread virtuali come funzionalità di anteprima, che Java 21 ha perfezionato e consolidato tramite JDK Enhancement Proposal 444.

instagram viewer

I thread virtuali offrono un'alternativa molto promettente, consentendo di affrontare le sfide di scalabilità in modo più efficace. Questo porta a migliori prestazioni e maggiore reattività delle applicazioni server.

Le raccolte in sequenza sono più utilizzabili

Tradizionalmente, utilizzando elenchi collegati nella programmazione Java ha richiesto un codice abbastanza prolisso. Ad esempio, per recuperare l'ultimo elemento, devi utilizzare questo approccio ingombrante:

var ultimo = list.get (list.size() - 1);

Tuttavia, Java 21 introduce un'alternativa concisa ed elegante:

var ultimo = lista.getUltimo();

Allo stesso modo, l'accesso al primo elemento di un LinkedHashSet richiede un percorso circolare:

var primo = linkedHashSet.iterator().next();

Ma con Java 21, questa attività diventa molto più semplice:

var primo = linkedHashSet.getFirst();

Puoi anche accedere all'ultimo elemento di un LinkedHashSet usando il new getLast metodo che evita l'iterazione dell'intero set.

Questi miglioramenti nelle raccolte in sequenza non solo migliorano la leggibilità del codice, ma semplificano anche il recupero degli elementi, rendendo la programmazione Java più efficiente e di facile utilizzo per gli sviluppatori.

Registra modelli per comodità

I record pattern, introdotti come funzionalità di anteprima in Java 19, offrono un comodo meccanismo per accedere ai campi di un record in Java senza la necessità di cast o metodi di accesso espliciti.

Entrano in sinergia con Pattern Matching per instanceof E Pattern Matching per l'interruttore, semplificando notevolmente il codice e migliorando la leggibilità complessiva.

Ecco un'illustrazione di questo concetto, con un semplice record denominato Posizione:

pubblico documentazione Posizione(int X, int si){}

In precedenza, l'esecuzione di azioni diverse in base alla classe di un oggetto richiedeva l'utilizzo Pattern Matching per instanceof, come esemplificato nel seguente frammento di codice:

pubblicovuotostampa(Oggetto o){
Se (o istanza di Posizione p) {
System.out.printf("o è una posizione: %d/%d%n", p.x(), p.y());
} altroSe (o istanza di Stringhe) {
System.out.printf("o è una stringa: %s%n", S);
} altro {
System.out.printf("o è qualcos'altro: %s%n", o);
}
}

Con Schemi di registrazione, ora puoi abbinare direttamente uno schema di record come Posizione (int x, int y) invece di utilizzare il Posizione pag modello. Ciò consente di accedere alle variabili X E si direttamente nel codice, eliminando la necessità di px() E p.y():

pubblicovuotostampa(Oggetto o){
Se (o istanza diPosizione(int X, int si)) {
System.out.printf("o è una posizione: %d/%d%n", x, y);
} altroSe (o istanza di Stringhe) {
System.out.printf("o è una stringa: %s%n", S);
} altro {
System.out.printf("o è qualcos'altro: %s%n", o);
}
}

Inoltre, puoi usare Schemi di registrazione insieme a Pattern Matching per l'interruttore, per semplificare ulteriormente il codice:

pubblicovuotostampa(Oggetto o){
interruttore (o) {
casoPosizione(int X, int si) -> System.out.printf("o è una posizione: %d/%d%n", x, y);
caso Stringa s -> System.out.printf("o è una stringa: %s%n", S);
predefinito -> System.out.printf("o è qualcos'altro: %s%n", o);
}
}

Modelli di record nidificati consentono di effettuare corrispondenze su record i cui campi sono essi stessi record. Ad esempio, considera un record denominato Sentiero che comprende un da E A posizione:

pubblico documentazione Sentiero(Posizione da, Posizione a){}

Utilizzando modelli di registrazione, stampando a Sentiero oggetto diventa più conciso:

pubblicovuotostampa(Oggetto o){
interruttore (o) {
casoSentiero(Posizione da, Posizione a) -> System.out.printf("o è un percorso: %d/%d -> %d/%d%n", da.x(), da.si(), A.X(), A.si());
// altri casi
}
}

Con l'aiuto di Schemi di registrazione, la gestione di record con campi di tipo diverso diventa più evidente e leggibile. Supponiamo di aver modificato i record, Posizione2D E Posizione3D, Dove Posizioneè un'interfaccia Java che entrambi implementano:

pubblico sigillato interfacciaPosizionepermessiPosizione2D, Posizione3D{}
pubblico documentazione Posizione2D(int X, int si) implementa Posizione {}
pubblico documentazione Posizione3D(int X, int si, int z) implementa Posizione {}
pubblico record Percorso < P estende Posizione > (P da, P a) {}

Per differenziare il comportamento di stampa per i percorsi 2D e 3D, è possibile utilizzare i modelli di registrazione:

pubblicovuotostampa(Oggetto o){
interruttore (o) {
casoSentiero(Posizione2D da, Posizione2D a) -> System.out.printf("o è un percorso 2D: %d/%d -> %d/%d%n", da.x(), da.si(), A.X(), A.si());
casoSentiero(Posizione3D da, Posizione3D a) -> System.out.printf("o è un percorso 3D: %d/%d/%d -> %d/%d/%d%n", da.x(), da.si(), da.z.z(), A.X(), A.si(), A.z.z());
// altri casi
}
}

I modelli di record riducono significativamente la verbosità e migliorano la leggibilità del codice quando si tratta di record contenenti campi di tipi diversi.

Sblocca nuove possibilità con Java 21

Java 21 introduce una serie di potenti funzionalità che aumentano le capacità del linguaggio di programmazione Java. Abbracciando questi miglioramenti, puoi semplificare i tuoi processi di sviluppo e sbloccare nuove possibilità per le tue applicazioni.

Rimanere aggiornato con le ultime funzionalità del linguaggio e framework Java ti consente di mantenere un codice efficiente e gestibile, assicurandoti di rimanere all'avanguardia della programmazione Java.