Pencocokan corak untuk `InstanceOf` dalam java moden
Java 14 memperkenalkan corak pencocokan contoh sebagai ciri pratonton, yang membolehkan pembolehubah jenis diisytiharkan dan ditukar secara automatik semasa pemeriksaan jenis; 2. Pencocokan corak dilaksanakan melalui sintaks jenis IF (OBJ Instanceof jenis), dan pembolehubah hanya sah dalam skop dengan keadaan yang benar dan tidak memerlukan pemutus; 3. Ciri ini meningkatkan kebolehbacaan dan keselamatan kod, mengurangkan kod boilerplate, dan mengelakkan risiko ClassCastException; 4. Apabila menggunakannya, anda perlu memberi perhatian kepada skop yang berubah -ubah dan menamakan konflik, dan tidak dapat menutup pembolehubah luaran yang ada; 5. Sejak Java 16, pemadanan corak Instanceof telah menjadi fungsi standard formal, yang digunakan secara meluas untuk senario seperti sama dengan kaedah penulisan semula dan pemprosesan polimorfik. Adalah disyorkan untuk menggantikan penukaran jenis eksplisit tradisional.
Java 14 memperkenalkan pemadanan corak instanceof
, peningkatan bahasa penting yang direka untuk memudahkan pemeriksaan jenis dan jenis kod penukaran. Dalam Jawa Tradisional, kita biasanya menggunakan instanceof
seperti ini:

jika (OBJ Instanceof String) { String s = (String) OBJ; System.out.println (s.length ()); }
Di sini anda perlu menilai jenis terlebih dahulu, kemudian melakukan pemutus, berulang -ulang dan berlebihan. Pemadanan corak menjadikan proses ini lebih mudah, lebih selamat dan boleh dibaca.
✅ Apakah instanceof
corak yang sesuai?
Bermula dari Java 14 (sebagai ciri pratonton), instanceof
menyokong secara langsung mengisytiharkan pembolehubah corak jenis . Jika jenis sepadan, pemboleh ubah akan melengkapkan penukaran jenis secara automatik dan bertindak dalam blok if
.

TAMAT:
jika (OBJ instanceof jenis pembolehubah) { // Variabel sudah taip, tiada pemutus diperlukan}
Contoh:

jika (obj instanceof string s) { System.out.println (s.length ()); // s adalah rentetan yang ditukar secara automatik } else { System.out.println ("bukan rentetan"); }
Barisan kod ini bersamaan dengan penukaran eksplisit sebelumnya, tetapi lebih mudah dan lebih selamat.
? Mekanisme kerja corak yang sepadan
Pencocokan corak menggabungkan dua operasi:
- Jenis cek (
instanceof
penghakiman) - Taipkan penukaran dalam skop
Pengkompil akan memastikan:
- Pembolehubah
s
hanya tersedia dalam skop dengan keadaantrue
- Penukaran jenis selamat dan tidak muncul
ClassCastException
jika (OBJ Instanceof Integer i && i> 10) { System.out.println ("Integer lebih besar daripada 10:" i); }
Nota: Anda boleh menggunakan pembolehubah baru i
secara langsung dalam keadaan, dan juga mengambil bahagian dalam penghakiman logik berikutnya.
⚠️Prectautions untuk digunakan
Batasan Skop Variabel : Pembolehubah skematik hanya sah dalam skop di mana
instanceof
adalahtrue
.jika (! (obj instanceof string s)) { // s tidak tersedia di sini! kembali; } System.out.println (s.length ()); // ✅ boleh diakses
Tidak boleh menutup pembolehubah luaran : Tidak boleh menggunakan nama pembolehubah sedia ada sebagai pembolehubah corak.
String S = "Hello"; jika (obj instanceof string s) {} // ❌ ralat kompilasi: duplikasi berubah -ubah
Struktur Warisan Sokongan : Ia sering digunakan untuk menangani objek polimorfik, seperti mengekstrak jenis tertentu dari
Object
.Objek obj = getSomeObject (); jika (OBJ Instanceof Dog d) { d.bark (); } else if (obj instanceof Cat c) { c.meow (); }
? Senario aplikasi praktikal
1. Menulis semula kaedah equals()
lebih mudah
Penulisan tradisional:
boolean awam sama dengan (objek o) { jika (! (o instanceof orang)) kembali palsu; Orang p = (orang) o; kembali nama.equals (p.name); }
Setelah menggunakan corak padanan:
boolean awam sama dengan (objek o) { kembali o instanceof orang p && name.equals (p.name); }
Lebih pendek, lebih jelas, dan mengelakkan kurungan dan penukaran yang tidak perlu.
2. Mengendalikan jenis campuran dalam koleksi (tidak disyorkan, tetapi kadang -kadang tidak dapat dielakkan)
untuk (item objek: mixedList) { jika (contoh item rentetan s) { System.out.println ("String:" S.ToUpperCase ()); } else if (item instanceof integer i) { System.out.println ("Nombor:" (i * 2)); } }
? Proses Evolusi (disokong oleh versi Java)
Versi Java | Negeri |
---|---|
Java 14 | Ciri Pratonton (perlu diaktifkan) |
Java 15 | Pratonton kedua |
Java 16 | Pelepasan rasmi ✅ |
Bermula dari Java 16, pemadanan corak instanceof
telah menjadi ciri standard dan boleh digunakan tanpa konfigurasi tambahan.
✅ Ringkasan: Manfaat padanan corak
- Kurangkan kod boilerplate (boilerplate)
- Menghapuskan pelakon yang jelas untuk mengurangkan risiko kesilapan
- Meningkatkan kebolehbacaan kod dan keselamatan
- Lebih semulajadi menyokong corak umum "penggunaan pertanyaan jenis"
Pada dasarnya itu sahaja. Sekarang tulis instanceof
dan jangan mengubah secara manual - gunakan corak yang sepadan untuk menjadi lebih moden dan elegan.
Atas ialah kandungan terperinci Pencocokan corak untuk `InstanceOf` dalam java moden. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Gunakan fmt.scanf untuk membaca input diformat, sesuai untuk data berstruktur yang mudah, tetapi rentetan dipotong ketika menghadapi ruang; 2. Adalah disyorkan untuk menggunakan bufio.scanner untuk membaca garis demi baris, menyokong input berbilang baris, pengesanan EOF dan input saluran paip, dan boleh mengendalikan kesilapan pengimbasan; 3. Gunakan io.readall (os.stdin) untuk membaca semua input sekaligus, sesuai untuk memproses data blok besar atau aliran fail; 4. Sambutan utama masa nyata memerlukan perpustakaan pihak ketiga seperti golang.org/x/term, dan Bufio mencukupi untuk senario konvensional; Cadangan Praktikal: Gunakan fmt.scan untuk input mudah interaktif, gunakan bufio.scanner untuk input baris atau saluran paip, gunakan io.readall untuk data blok besar, dan sentiasa mengendalikan

Pilihan adalah kelas kontena yang diperkenalkan oleh Java 8 untuk pengendalian yang lebih selamat dari nilai -nilai yang berpotensi null, dengan tujuan terasnya adalah dengan jelas "nilai hilang" dan mengurangkan risiko nullPointerexception. 1. Buat contoh kosong menggunakan optional.empty (), optional.of (nilai) membungkus nilai non-null, dan optional.ofnullable (nilai) dengan selamat membungkus nilai null. 2. Elakkan menggabungkan ispresent () dan dapatkan () secara langsung. Anda harus memberi keutamaan untuk menggunakan Orelse () untuk memberikan nilai lalai. Orelseget () melaksanakan pengiraan kelewatan. Kaedah ini disyorkan apabila nilai lalai adalah overhead.

SQLServer sendiri tidak menyokong seni bina tanpa pelayan, tetapi platform awan menyediakan penyelesaian yang sama. 1. Kolam ServerlessSQL Azure boleh secara langsung menanyakan fail Datalake dan caj berdasarkan penggunaan sumber; 2. 3. Awsathena menyokong pertanyaan SQL standard untuk data S3, dan caj berdasarkan data yang diimbas; 4. GooglebigQuery mendekati konsep tanpa pelayan melalui FederatedQuery; 5. Sekiranya anda mesti menggunakan fungsi SQLServer, anda boleh memilih perkhidmatan tanpa pelayan AzuresqLdatabase

Adalah disyorkan untuk menggunakan kata kunci untuk memeriksa sama ada kunci wujud dalam kamus, kerana ia adalah ringkas, cekap dan sangat mudah dibaca; 2. Ia tidak disyorkan untuk menggunakan kaedah GET () untuk menentukan sama ada kunci wujud, kerana ia akan salah apabila kunci wujud tetapi nilai tidak ada; 3. Anda boleh menggunakan kaedah kekunci (), tetapi ia berlebihan, kerana secara lalai untuk memeriksa kunci; 4. Apabila anda perlu mendapatkan nilai dan kunci yang dijangkakan biasanya wujud, anda boleh menggunakan cuba-kecuali untuk menangkap pengecualian KeyError. Kaedah yang paling disyorkan ialah menggunakan kata kunci, yang selamat dan cekap, dan tidak terjejas oleh nilai tiada, yang sesuai untuk kebanyakan senario.

Installjdk, setjava_home, InstalljavaextensionPackinvscode, createoropenamaven/gradleProject, memastikanprojectstructure, anduseBuilt-inrun/debugfeatures;

Useconnectionpoolingwithhikaricptoreusedatabaseconnectionsandreduceoverhead.2.UsePreparedStatementTopreventsqlinjectionAndroveProveQueryperformance.3.fetchonLyRequiredDataByselectingsPecificColumnSandapplyFilation.4.Se

Menguasai model integrasi Springcloud adalah penting untuk membina sistem yang diedarkan moden. 1. Pendaftaran dan Penemuan Perkhidmatan: Pendaftaran dan penemuan perkhidmatan automatik direalisasikan melalui Eureka atau Springcloudkubernetes, dan pengimbangan beban dilakukan dengan reben atau loadbalancer; 2. 3. API Gateway: Gunakan Springcloudgateway untuk menyatukan entri, kawalan penghalaan dan pengurusan kebenaran, dan menyokong pengehadan dan pembalakan semasa; 4. Penjejakan pautan yang diedarkan: Menggabungkan sleuth dan zipkin untuk merealisasikan proses penuh permintaan visual.

Panggilan sistem adalah mekanisme di mana program pengguna meminta operasi istimewa melalui antara muka kernel. Aliran kerja adalah: 1. Program pengguna memanggil fungsi enkapsulasi; 2. Tetapkan nombor panggilan sistem dan parameter kepada daftar; 3. Melaksanakan arahan syscall dan jatuh ke dalam negeri kernel; 4. Melaksanakan fungsi pemprosesan yang sepadan dalam jadual semak; 5. Kembali ke keadaan pengguna selepas pelaksanaan. Anda boleh menggunakan alat Strace untuk mengesan, terus panggil fungsi SYSCall () atau periksa fail header Unitd.H untuk melihat nombor panggilan. Anda perlu ambil perhatian bahawa perbezaan antara panggilan sistem dan fungsi perpustakaan adalah sama ada mereka memasuki keadaan kernel, dan panggilan yang kerap akan menjejaskan prestasi. Anda harus mengoptimumkan dengan menggabungkan I/O, menggunakan kaedah MMAP dan Epoll, dan pemahaman panggilan sistem akan membantu anda menguasai mekanisme operasi asas Linux.
