Panduan Lengkap ke kelas Java `Pilihan`
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 yang mungkin 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. Orelsethrow () melemparkan pengecualian apabila nilai hilang. 3. Gunakan peta () untuk menukar nilai, flatmap () mengelakkan pilihan bersarang, dan penapis () penapis nilai mengikut syarat. 4. Ia dilarang menggunakan pilihan sebagai parameter kaedah, medan kelas atau elemen pengumpulan, dan dilarang untuk mengembalikan NULL dan bukannya pilihan.empty (). 5. Anda boleh disebut rantaian penapis, peta, dan flatmap untuk membina proses pemprosesan data yang selamat, dan menggunakan pilihan :: aliran untuk menapis nilai kosong dan mengekstrak hasil dengan aliran. Penggunaan pilihan yang betul boleh meningkatkan keselamatan kod dan kebolehbacaan, menjadikannya jenis pulangan pilihan untuk menyatakan "hasil pilihan".
Kelas Optional
Java, yang diperkenalkan di Java 8, adalah objek kontena yang mungkin atau mungkin tidak mengandungi nilai non-null. Ia direka untuk membantu pemaju mengendalikan nilai null
dengan lebih anggun dan mengurangkan risiko NullPointerException
(NPE). Walaupun Optional
bukan penyelesaian untuk setiap masalah, apabila digunakan dengan betul, ia boleh menjadikan kod bersih, lebih selamat, dan lebih ekspresif.

Berikut adalah panduan lengkap untuk menggunakan Optional
dengan berkesan dalam aplikasi Java anda.
Apakah Optional
dan mengapa menggunakannya?
Optional<t></t>
adalah pembungkus untuk nilai yang mungkin tidak hadir. Daripada mengembalikan null
dari kaedah, anda boleh mengembalikan Optional<t></t>
, menjadikannya jelas bahawa hasilnya mungkin kosong.

Mengapa menggunakannya?
- Mengelakkan
NullPointerException
dengan reka bentuk. - Membuat API lebih jelas - Penelepon tahu nilai mungkin tidak hadir.
- Menggalakkan pengendalian nilai yang lebih baik dan bukannya mengabaikannya.
- Menggalakkan pengaturcaraan gaya berfungsi dengan kaedah seperti
map
,filter
, danflatMap
.
Pilihan awam <string> findNamebyId (int id) { // mengembalikan pilihan.empty () jika tidak dijumpai kembali repositori.findById (ID) .map (pengguna :: getName); }
Mewujudkan contoh Optional
Terdapat tiga cara utama untuk membuat Optional
:

1. Optional.empty()
- untuk nilai yang tidak hadir
Gunakan apabila anda tahu tiada nilai.
Pilihan <string> kosong = optional.empty (); // Tiada nilai
2. Optional.of(value)
-untuk nilai bukan nol
Gunakan apabila anda pasti nilai itu tidak batal. Melemparkan NullPointerException
jika nilai itu adalah batal.
String name = "Alice"; Pilihan <string> optName = optional.of (nama); // ok
3. Optional.ofNullable(value)
- untuk nilai yang mungkin dibatalkan
Selamat membungkus nilai yang boleh menjadi batal.
Nama String = getNameFromDatabase (); // mungkin kembali null Pilihan <string> optName = optional.OfNullable (nama); // ok walaupun nama itu batal
✅ Amalan Terbaik: Penggunaan
ofNullable()
Apabila berurusan dengan nilai -nilai yang berpotensi null.
Memeriksa dan Mendapatkan Nilai
Sebaik sahaja anda mempunyai Optional
, anda perlu mengekstrak nilai dengan selamat.
isPresent()
dan isEmpty()
- Periksa kehadiran
Pilihan <string> opt = optional.of ("bob"); jika (opt.ispresent ()) { System.out.println ("Nama:" opt.get ()); }
Atau lebih baik (sejak Java 11):
jika (opt.isempty ()) { System.out.println ("Tiada Nama Ditemui"); }
❌ Jangan terlalu banyak
isPresent()
get()
- ia mengalahkan tujuanOptional
.
get()
- Dapatkan nilai (berbahaya!)
Hanya hubungi get()
jika anda pasti nilai wujud. Jika tidak, ia melemparkan NoSuchElementException
.
Nilai string = opt.get (); // berisiko!
❌ Elakkan
get()
melainkan anda telah memeriksa denganisPresent()
.
orElse(default)
- Berikan sandaran
Mengembalikan nilai jika ada, jika tidak, pulangan lalai.
Nama rentetan = opt.orelse ("tidak diketahui");
orElseGet(Supplier)
- Kemunculan malas
Gunakan apabila mengira lalai adalah mahal.
Nama String = opt.orelseget (() -> ComputeDefaultName ());
✅ Lebih suka
orElseGet()
ke atasorElse()
apabila lalai melibatkan pengkomputeran.
orElseThrow()
- Buang pengecualian jika hilang
Hebat untuk menguatkuasakan kehadiran.
Nama String = opt.orelsethrow (() -> baru IllegalArgumentException ("Nama diperlukan"));
Sejak Java 10, anda juga boleh menggunakan:
Nama rentetan = opt.orelsethrow (); // melemparkan nosuchelementexception
Mengubah dan menapis nilai
Operasi Fungsian Sokongan Optional
untuk bekerja dengan nilai yang dibungkus tanpa mengekstraknya.
map()
- mengubah nilai
Memohon fungsi jika nilai hadir dan mengembalikan Optional
baru.
Pilihan <string> nameOpt = getUser (). Map (pengguna :: getName);
Jika getUser()
mengembalikan Optional<User>
, maka map
dengan selamat mengekstrak dan mengubahnya.
flatMap()
- Elakkan Optional
bersarang
Gunakan apabila transformasi mengembalikan Optional
lain.
Pilihan <string> emailOpt = getUser () .FlatMap (user -> user.geteMail ()); // e -mel mungkin pilihan <string>
Tanpa flatMap
, anda akan mendapat Optional<Optional<String>>
.
filter()
- Simpan secara kondusifkan nilai
Menyimpan nilai hanya jika ia sepadan dengan ramalan.
Pilihan <string> dewasaName = getPerson () .Filter (p -> p.getage ()> = 18) .map (orang :: getName);
Sekiranya orang itu berusia di bawah 18 tahun, hasilnya menjadi Optional.empty()
.
Penyalahgunaan biasa Optional
Walaupun Optional
berkuasa, ia sering disalahgunakan. Berikut adalah perangkap biasa:
Jangan gunakan
Optional
sebagai parameter kaedah// ❌ Bad setname void awam (pilihan <string> name) {...}
Sebaliknya, membebankan kaedah atau menggunakan
null
.Jangan menyimpan medan
Optional
di kelas// ❌ Elakkan orang kelas { Pilihan peribadi <string> middlename; }
Ini merumitkan siri dan menambah overhead yang tidak perlu. Gunakan
null
dan dokumennya.Jangan panggil
isPresent()
danget()
bersama -sama seperti pemeriksaan null// ❌ anti-corak jika (opt.ispresent ()) { gunakan (opt.get ()); }
Lebih suka
ifPresent()
:opt.ifPresent (ini :: penggunaan);
Jangan pulih
null
dari kaedah yang mengembalikanOptional
// ❌ Jangan pernah melakukan ini kembali null; // bukan pilihan.empty ()
Petua Lanjutan
Operasi Chaining
Anda boleh berantai map
, filter
, dan flatMap
untuk membina saluran paip yang selamat.
E -mel String = userrepo.findbyId (123) .filter (pengguna :: isactive) .map (pengguna :: getContactInfo) .FlatMap (contactInfo :: getemail) .Filter (e -mel -> email.endswith ("@company.com")) .orelse ("default@company.com");
Gunakan dengan sungai
Optional
berfungsi dengan baik dengan Stream
.
Senarai <pilihan <string >> list = ...; Senarai <string> hasil = list.stream () .FlatMap (Pilihan :: Stream) .kolect (collectors.tolist ());
Ini menapis pilihan kosong dan mengekstrak nilai.
Ringkasan
Optional
adalah alat untuk menulis kod yang lebih selamat, lebih ekspresif - bukan pengganti untuk semua cek null. Gunakannya terutamanya sebagai jenis pulangan untuk menunjukkan hasil pilihan.
Rekap Amalan Terbaik:
- ✅ Gunakan
Optional
sebagai jenis pulangan apabila nilai mungkin tidak hadir. - ✅ Gunakan
orElseGet()
bukannyaorElse()
untuk lalai mahal. - ✅
map
rantai,flatMap
, danfilter
untuk transformasi bersih. - ✅ Elakkan
Optional
dalam bidang, parameter, atau koleksi. - ✅ Jangan Kembali
null
dan bukannyaOptional.empty()
.
Apabila digunakan dengan betul, Optional
membantu menghapuskan NullPointerException
dan menjadikan niat kod anda lebih jelas.
Pada asasnya, ia bukan tentang mengelakkan null
sepenuhnya-ia adalah mengenai ketidakhadiran konsep kelas pertama dalam reka bentuk API anda.
Atas ialah kandungan terperinci Panduan Lengkap ke kelas Java `Pilihan`. 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











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.

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

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.

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.
