Dengan keluaran Java 16, peningkatan besar telah diperkenalkan dengan pengenalan Rekod (JEP 395), yang membolehkan cara yang lebih mudah dan ringkas untuk mengisytiharkan kelas yang digunakan terutamanya untuk membawa data. Penambahbaikan ini kini telah dipertingkatkan lagi di Java 21, dengan penambahan Padanan Corak dan Rekod (JEP 406). Ciri baharu ini membolehkan penggunaan padanan corak untuk menguji sama ada nilai ialah tika kelas Rekod dan mengekstrak komponennya dengan cara yang lebih diperkemas. Dalam artikel ini, kami akan meneroka perubahan yang dibawa oleh Padanan Corak dan Rekod dalam Java 21 dan cara ia boleh memanfaatkan pembangun Java.
Rekod sebagai Pembawa Telus untuk Data
Rekod, yang diperkenalkan dalam Java 16, ialah kelas yang digunakan terutamanya untuk menyimpan dan membawa data. Mereka adalah pembawa telus, bermakna bahawa tujuan utama mereka adalah untuk menyimpan data, dan semua fungsi lain seperti pembina, kaedah, dan kaedah equals/hashCode, dijana secara automatik oleh pengkompil, berdasarkan medan data yang ditakrifkan dalam rekod. Ini menjadikan ia sesuai untuk digunakan dalam senario di mana data perlu disiri atau dihantar melalui rangkaian.
Pertimbangkan contoh kelas Line yang mentakrifkan dua koordinat X dan Y:
Baris rekod(int x, int y) {}
Untuk menggunakan kelas ini, kita hanya boleh membuat contoh kelas Line dan mengakses medan datanya menggunakan kaedah pengakses komponen terbina dalam, x() dan y():
Baris talian = Baris baharu(0, 10);
int x = line.x();
int y = line.y();
System.out.println("X: " + x + ", Y: " + y); // Output: X: 0, Y: 10
Padanan Corak dengan Rekod
Dalam Java 21, Pemadanan Corak telah ditambahkan yang membolehkan untuk menguji sama ada nilai ialah contoh kelas Rekod dan mengekstrak komponennya dengan cara yang lebih diperkemas. Ciri ini amat berguna apabila berurusan dengan pangkalan kod besar yang menggunakan Rekod secara meluas.
Pertimbangkan contoh berikut di mana kita ingin menguji sama ada objek ialah contoh kelas Line dan mengekstrak komponennya:
panjang lompang statik(obj objek) {
if (obj instanceof Line l) {
int x = l.x();
int y = l.y();
System.out.println(y-x);
}
}
Seperti yang anda boleh lihat, kami telah menggunakan corak jenis untuk menguji sama ada objek itu adalah contoh Point dan jika ya, kami telah mengekstrak komponennya dengan menggunakan kaedah pengakses komponen terbina dalam. Walaupun kod ini berfungsi, ia boleh dipermudahkan lagi dengan penggunaan corak rekod dalam Java 21.
Dengan corak rekod, kami bukan sahaja boleh menguji sama ada nilai ialah tika kelas Rekod, tetapi kami juga boleh mengekstrak komponennya dalam satu baris kod. Ini dicapai dengan mengangkat pengisytiharan pembolehubah tempatan untuk komponen yang diekstrak ke dalam corak itu sendiri dan memulakan pembolehubah tersebut dengan menggunakan kaedah pengakses apabila nilai dipadankan dengan corak.
Pertimbangkan kod berikut yang menggunakan corak rekod:
panjang lompang statik(obj objek) {
if (obj instanceof Line(int x, int y)) {
System.out.println(y-x);
}
}
Kod ini lebih ringkas dan boleh dibaca. Kami telah menghapuskan keperluan untuk mencipta objek baharu dan menggunakan kaedah pengakses komponennya untuk mendapatkan data. Corak rekod secara langsung mengekstrak dan memulakan komponen untuk kami, menjadikan kod kami lebih diperkemas.
Corak Rekod Bersarang
Salah satu cabaran utama yang dihadapi oleh pembangun ialah berurusan dengan graf objek kompleks dan mengekstrak data daripadanya. Di sinilah kuasa sebenar padanan corak datang, kerana ia membolehkan kami membuat skala dengan elegan dan memadankan graf objek yang lebih rumit.
Pertimbangkan kelas berikut: Pekerja, Jabatan (enum), dan Syarikat (rekod). Kita boleh menggunakan corak rekod untuk mengekstrak Jabatan Pekerja daripada objek Syarikat:
// Setakat Java 21
cetakan kosong statikJabatan Pekerja(Syarikat c, Nama rentetan) {
jika (c contoh Syarikat(Jabatan Jabatan, Senarai
untuk (Pekerja e : pekerja) {
jika (e.getName().sama dengan(nama)) {
System.out.println(nama + " berada dalam " + jabatan + " jabatan.");
kembali;
}
}
}
System.out.println(nama + " tidak dijumpai.");
}
Dalam contoh ini, kami menggunakan corak bersarang untuk mengekstrak Jabatan Pekerja daripada objek Syarikat. Kami menyemak sama ada objek Syarikat yang diberikan mempunyai Jabatan dan senarai Pekerja, dan kemudian melingkari senarai untuk mencari Pekerja dengan nama yang diberikan. Jika Pekerja ditemui, kami mencetak jabatan mereka. Jika tidak, kami mencetak mesej yang mengatakan bahawa Pekerja tidak ditemui.
嵌套模式也可以用于我们想要一次匹配和解构多个值的情况。考虑以下示例,我们要检查给定坐标是否位于矩形内:
//从 Java 21 开始
记录点(双x,双y){}
记录矩形(点左上,点右下){}
// 检查给定点是否位于给定矩形内
static boolean isPointInsideRectangle(点 p, 矩形 r) {
if (r 矩形实例(Point(var x1, var y1), Point(var x2, var y2))) {
if (p.x() > x1 && p.y() > y1 && p.x() 返回真;
}
}
返回错误;
}
在此示例中,我们使用嵌套模式来检查给定的 Point 对象是否落在给定的 Rectangle 对象的范围内。嵌套模式允许我们访问矩形左上角和右下角的 x 和 y 坐标,而无需编写多行代码。
总之,通过在 Java 21 中添加模式匹配和记录 (JEP 406),我们在处理复杂对象和从复杂对象中提取数据的方式上有了显着的改进。此功能极大地简化了代码,使其更具可读性和简洁性。它还有助于处理模式匹配可能失败的故障场景。通过这些更改,Java 21 继续使代码更加精简,并改善 Java 开发者的开发体验。
通过 MyExamCloud 的 Java SE 21 开发人员专业练习测试升级您的 Java 21 技能。发展并测试您的知识,成为 Java 21 专家。
Atas ialah kandungan terperinci Padanan Corak dan Rekod Perubahan dalam Java Setiap Pembangun Java Mesti Tahu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!