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
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!