Cea mai recentă revizuire a Java introduce o sintaxă utilă pentru Înregistrări, printre alte îmbunătățiri.

Lumea programării Java este în continuă evoluție, necesitându-vă să fiți la curent pentru a excela în domeniul dvs.

Java 21 aduce un val de îmbunătățiri interesante care revoluționează modul în care abordați concurența, operațiunile de colectare și lucrul cu înregistrările.

Vă prezentăm firele virtuale

Scalarea aplicațiilor server a prezentat întotdeauna provocări, firele de execuție devenind adesea blocaje. Numărul limitat de fire de execuție, combinat cu așteptarea frecventă a evenimentelor sau a blocărilor pentru a se debloca, împiedică performanța generală.

În trecut, abordarea acestei probleme implica utilizarea constructe precum CompletabilViitorul sau cadre reactive, rezultând un cod complicat, care a fost greu de înțeles și de întreținut.

Din fericire, Java 19 a introdus fire virtuale ca o caracteristică de previzualizare, pe care Java 21 le-a rafinat și consolidat prin propunerea de îmbunătățire JDK 444.

Firele virtuale oferă o alternativă foarte promițătoare, permițându-vă să abordați provocările de scalabilitate mai eficient. Acest lucru duce la o performanță îmbunătățită și o capacitate de răspuns sporită a aplicațiilor server.

Colecțiile secvențiale sunt mai utilizabile

Tradiţional, folosind liste legate în programarea Java a cerut un cod destul de pronunțat. De exemplu, pentru a prelua ultimul element, trebuie să utilizați această abordare greoaie:

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

Cu toate acestea, Java 21 introduce o alternativă concisă și elegantă:

var ultimul = list.getLast();

În mod similar, accesarea primului element al unui LinkedHashSet necesită o rută giratorie:

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

Dar cu Java 21, această sarcină devine mult mai simplă:

var primul = linkedHashSet.getFirst();

De asemenea, puteți accesa ultimul element al unui LinkedHashSet folosind noul getLast metodă care evită iterarea întregului set.

Aceste îmbunătățiri ale colecțiilor secvențiale nu numai că îmbunătățesc lizibilitatea codului, ci și eficientizează recuperarea elementelor, făcând programarea Java mai eficientă și mai prietenoasă pentru dezvoltatori.

Înregistrați modele pentru confort

Modelele de înregistrare, introduse ca o caracteristică de previzualizare în Java 19, oferă un mecanism convenabil pentru accesarea câmpurilor unei înregistrări în Java fără a fi nevoie de modele explicite sau metode de acces.

Ele fac sinergie cu Potrivirea modelelor de exemplu și Potrivirea modelului pentru comutator, simplificând semnificativ codul și îmbunătățind lizibilitatea generală.

Iată o ilustrare a acestui concept, cu o înregistrare simplă numită Poziţie:

public record Poziţie(int X, int y){}

Anterior, efectuarea diferitelor acțiuni bazate pe clasa unui obiect era necesară utilizarea Potrivirea modelelor de exemplu, după cum este exemplificat în următorul fragment de cod:

publicgolimprimare(Obiectul o){
dacă (o instanță de Poziția p) {
System.out.printf(„o este o poziție: %d/%d%n”, p.x(), p.y());
} altfeldacă (o instanță de Siruri de caractere) {
System.out.printf(„o este un șir: %s%n”, s);
} altfel {
System.out.printf(„o este altceva: %s%n”, o);
}
}

Cu Modele de înregistrare, acum puteți potrivi direct un model de înregistrare, cum ar fi Poziție (int x, int y) în loc de a folosi Poziția p model. Acest lucru vă permite să accesați variabile X și y direct în cod, eliminând nevoia de p.x() și p.y():

publicgolimprimare(Obiectul o){
dacă (o instanță dePoziţie(int X, int y)) {
System.out.printf(„o este o poziție: %d/%d%n”, X y);
} altfeldacă (o instanță de Siruri de caractere) {
System.out.printf(„o este un șir: %s%n”, s);
} altfel {
System.out.printf(„o este altceva: %s%n”, o);
}
}

Mai mult, puteți folosi Modele de înregistrare în legătură cu Potrivirea modelului pentru comutator, pentru a simplifica și mai mult codul:

publicgolimprimare(Obiectul o){
intrerupator (o) {
cazPoziţie(int X, int y) - > System.out.printf(„o este o poziție: %d/%d%n”, X y);
caz String s -> System.out.printf(„o este un șir: %s%n”, s);
Mod implicit -> System.out.printf(„o este altceva: %s%n”, o);
}
}

Modele de înregistrare imbricate vă permit să potriviți înregistrările ale căror câmpuri sunt ele însele înregistrări. De exemplu, luați în considerare o înregistrare numită cale care cuprinde a din și la poziţie:

public record cale(Poziția de la, Poziția către){}

Prin utilizarea modelelor de înregistrare, imprimarea a cale obiectul devine mai concis:

publicgolimprimare(Obiectul o){
intrerupator (o) {
cazcale(Poziția de la, Poziția către) - > System.out.printf(„o este o cale: %d/%d -> %d/%d%n”, de la.x(), din.y(), la.X(), la.y());
// alte cazuri
}
}

Cu ajutorul lui Modele de înregistrare, manipularea înregistrărilor cu câmpuri de diferite tipuri devine mai evidentă și mai lizibilă. Să presupunem că ați modificat înregistrările, Poziția 2D și Poziția 3D, Unde Poziţieeste o interfață Java că ambele implementează:

public sigilat interfataPoziţiepermisePoziția 2D, Poziția 3D{}
public record Poziția 2D(int X, int y) implementează Poziția {}
public record Poziția 3D(int X, int y, int z) implementează Poziția {}
public înregistrare Calea < P extinde Poziția > (P de la, P la) {}

Pentru a diferenția comportamentul de imprimare pentru căile 2D și 3D, puteți utiliza modele de înregistrare:

publicgolimprimare(Obiectul o){
intrerupator (o) {
cazcale(Poziția2D de la, Poziția2D la) - > System.out.printf(„o este o cale 2D: %d/%d -> %d/%d%n”, de la.x(), din.y(), la.X(), la.y());
cazcale(Poziție 3D de la, Poziție 3D către) - > System.out.printf(„o este o cale 3D: %d/%d/%d -> %d/%d/%d%n”, de la.x(), din.y(), din.z(), la.X(), la.y(), la.z());
// alte cazuri
}
}

Tiparele de înregistrare reduc în mod semnificativ gradul de verbozitate și îmbunătățesc lizibilitatea codului atunci când aveți de-a face cu înregistrări care conțin câmpuri de diferite tipuri.

Deblocați noi posibilități cu Java 21

Java 21 introduce o serie de caracteristici puternice care măresc capacitățile limbajului de programare Java. Prin adoptarea acestor îmbunătățiri, vă puteți eficientiza procesele de dezvoltare și puteți debloca noi posibilități pentru aplicațiile dvs.

Rămâneți la curent cu cele mai recente caracteristici de limbaj și framework-uri Java vă dă putere să mențineți un cod eficient și care poate fi întreținut, asigurându-vă că rămâneți la avangarda programării Java.