Jadual Kandungan
Apakah Optional dan mengapa menggunakannya?
Mewujudkan contoh Optional
1. Optional.empty() - untuk nilai yang tidak hadir
2. Optional.of(value) -untuk nilai bukan nol
3. Optional.ofNullable(value) - untuk nilai yang mungkin dibatalkan
Memeriksa dan Mendapatkan Nilai
isPresent() dan isEmpty() - Periksa kehadiran
get() - Dapatkan nilai (berbahaya!)
orElse(default) - Berikan sandaran
orElseGet(Supplier) - Kemunculan malas
orElseThrow() - Buang pengecualian jika hilang
Mengubah dan menapis nilai
map() - mengubah nilai
flatMap() - Elakkan Optional bersarang
filter() - Simpan secara kondusifkan nilai
Penyalahgunaan biasa Optional
Petua Lanjutan
Operasi Chaining
Gunakan dengan sungai
Ringkasan
Rumah Java javaTutorial Panduan Lengkap ke kelas Java `Pilihan`

Panduan Lengkap ke kelas Java `Pilihan`

Jul 27, 2025 am 12:22 AM
java optional

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".

Panduan Lengkap ke kelas Java `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.

Panduan Lengkap ke kelas Java `pilihan`

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.

Panduan Lengkap ke kelas Java `pilihan`

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 , dan flatMap .
 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 :

Panduan Lengkap ke kelas Java `pilihan`

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 tujuan Optional .

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 dengan isPresent() .

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 atas orElse() 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() dan get() 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 mengembalikan Optional

     // ❌ 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() bukannya orElse() untuk lalai mahal.
  • map rantai, flatMap , dan filter untuk transformasi bersih.
  • ✅ Elakkan Optional dalam bidang, parameter, atau koleksi.
  • ✅ Jangan Kembali null dan bukannya Optional.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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Lengkap ke kelas Java `Pilihan` Panduan Lengkap ke kelas Java `Pilihan` Jul 27, 2025 am 12:22 AM

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.

Pilihan pengkomputeran tanpa pelayan SQL Pilihan pengkomputeran tanpa pelayan SQL Jul 27, 2025 am 03:07 AM

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

Python semak jika kunci wujud dalam contoh kamus Python semak jika kunci wujud dalam contoh kamus Jul 27, 2025 am 03:08 AM

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.

Membaca dari Stdin dalam Contoh Membaca dari Stdin dalam Contoh Jul 27, 2025 am 04:15 AM

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

Memahami Panggilan Sistem Linux Memahami Panggilan Sistem Linux Jul 27, 2025 am 12:16 AM

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.

Persediaan VSCode untuk Pembangunan Java Persediaan VSCode untuk Pembangunan Java Jul 27, 2025 am 02:28 AM

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

Mengoptimumkan interaksi pangkalan data dalam aplikasi Java Mengoptimumkan interaksi pangkalan data dalam aplikasi Java Jul 27, 2025 am 02:32 AM

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

Corak integrasi awan java dengan awan musim bunga Corak integrasi awan java dengan awan musim bunga Jul 27, 2025 am 02:55 AM

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.

See all articles