Rumah  >  Artikel  >  Java  >  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
Susan Sarandonasal
2024-10-25 10:03:02911semak imbas

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>

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>

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>

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!

Kenyataan:
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