Rumah > Java > javaTutorial > Bagaimanakah Pilihan dalam Java 8 boleh membantu saya mengelakkan NullPointerExceptions dalam rantai getter yang kompleks?

Bagaimanakah Pilihan dalam Java 8 boleh membantu saya mengelakkan NullPointerExceptions dalam rantai getter yang kompleks?

Susan Sarandon
Lepaskan: 2024-10-25 10:03:02
asal
1006 orang telah melayarinya

How can Optional in Java 8 help me avoid NullPointerExceptions in complex getter chains?

Memastikan Keselamatan Null dalam Rangkaian Panggilan Getter

Untuk melindungi daripada NullPointerExceptions dalam rangkaian panggilan getter yang kompleks, satu pendekatan biasa melibatkan semakan nol eksplisit pada setiap peringkat, seperti yang ditunjukkan dalam coretan kod yang disediakan.

Walau bagaimanapun, pendekatan ini boleh menjadi membosankan dan bertele-tele, terutamanya dalam senario dengan banyak panggilan getter. Untuk menangani perkara ini, Java 8 memperkenalkan jenis Pilihan, yang menguruskan nilai nol dengan elegan dan memudahkan struktur kod.

Menggunakan Pilihan untuk Mengendalikan Null

Dengan menggunakan Pilihan, anda boleh mengendalikan null dengan lancar dalam rantai getter tanpa melanggar Undang-undang Demeter. Pilihan membolehkan anda merantai berbilang operasi peta, yang melaksanakan panggilan getter dengan berkesan. Pemeriksaan null dikendalikan secara automatik dalam rangka kerja ini.

Pertimbangkan contoh berikut, apabila objek tidak dimulakan:

<code class="java">System.out.println("----- Not Initialized! -----");

Optional.ofNullable(new Outer())
        .map(out -> out.getNested())
        .map(nest -> nest.getInner())
        .map(in -> in.getFoo())
        .ifPresent(foo -> System.out.println("foo: " + foo)); //no print</code>
Salin selepas log masuk

Dalam kes ini, tiada output akan dijana kerana nilai nol ditemui semasa pengambil memanggil.

Sekarang, mari kita mulakan objek:

<code class="java">System.out.println("----- Let's Initialize! -----");

Optional.ofNullable(new OuterInit())
        .map(out -> out.getNestedInit())
        .map(nest -> nest.getInnerInit())
        .map(in -> in.getFoo())
        .ifPresent(foo -> System.out.println("foo: " + foo)); //will print!</code>
Salin selepas log masuk

Kali ini, program berjaya mencetak "foo: yeah!", menunjukkan cara Pilihan mengendalikan nilai nol dengan anggun.

Memohon Pilihan pada Rantaian Getter Anda

Untuk rantai getter khusus anda yang melibatkan house.getFloor(0).getWall(WEST).getDoor().getDoorknob(), anda boleh gunakan Pilihan dengan cara berikut:

<code class="java">Optional.ofNullable(house)
        .map(house -> house.getFloor(0))
        .map(floorZero -> floorZero.getWall(WEST))
        .map(wallWest -> wallWest.getDoor())
        .map(door -> wallWest.getDoor())</code>
Salin selepas log masuk

Coretan kod ini mengembalikan Pilihan, membolehkan anda berinteraksi dengan selamat dengan objek pintu tanpa mengambil kira rujukan nol.

Atas ialah kandungan terperinci Bagaimanakah Pilihan dalam Java 8 boleh membantu saya mengelakkan NullPointerExceptions dalam rantai getter yang kompleks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan