Java 9 java.util.Objects Tambahan

1. Pengenalan

Kelas java.util.Objects telah menjadi sebahagian daripada Java sejak versi 1.7. Kelas ini menyediakan kaedah utiliti statik untuk objek yang dapat digunakan untuk melakukan beberapa tugas sehari-hari seperti memeriksa kesetaraan, pemeriksaan nol , dll

Dalam artikel ini, kita akan melihat kaedah baru yang diperkenalkan dalam kelas java.util.Objects di Java 9.

2. requireNonNullElse Menghubungi

Kaedah ini menerima dua parameter dan mengembalikan parameter pertama jika tidak nol , parameter kedua sebaliknya. Sekiranya kedua-dua parameter itu nol , ia akan membuang NullPointerException :

private List aMethodReturningNullList(){ return null; } @Test public void givenNullObject_whenRequireNonNullElse_thenElse() { List aList = Objects.requireNonNullElse( aMethodReturningNullList(), Collections.EMPTY_LIST); assertThat(aList, is(Collections.EMPTY_LIST)); } private List aMethodReturningNonNullList() { return List.of("item1", "item2"); } @Test public void givenObject_whenRequireNonNullElse_thenObject() { List aList = Objects.requireNonNullElse( aMethodReturningNonNullList(), Collections.EMPTY_LIST); assertThat(aList, is(List.of("item1", "item2"))); } @Test(expected = NullPointerException.class) public void givenNull_whenRequireNonNullElse_thenException() { Objects.requireNonNullElse(null, null); }

3. Menggunakan memerlukanNonNullElseGet

Kaedah ini serupa dengan memerlukanNonNullElse , kecuali bahawa parameter kedua, adalah java.util.fungsi. Antaramuka pembekal yang membolehkan penentuan koleksi yang malas. The Supplier pelaksanaan bertanggungjawab untuk mengembalikan objek bukan nol seperti yang ditunjukkan di bawah:

@Test public void givenObject_whenRequireNonNullElseGet_thenObject() { List aList = Objects.requireNonNullElseGet( null, List::of); assertThat(aList, is(List.of())); }

4. Menggunakan checkIndex

Kaedah ini digunakan untuk memeriksa apakah indeks berada dalam panjang yang ditentukan. Ia mengembalikan indeks jika 0 <= index <panjang . Jika tidak, ia melancarkan IndexOutOfBoundsException seperti yang ditunjukkan di bawah:

@Test public void givenNumber_whenInvokeCheckIndex_thenNumber() { int length = 5; assertThat(Objects.checkIndex(4, length), is(4)); } @Test(expected = IndexOutOfBoundsException.class) public void givenOutOfRangeNumber_whenInvokeCheckIndex_thenException() { int length = 5; Objects.checkIndex(5, length); }

5. Menggunakan checkFromToIndex

Kaedah ini digunakan untuk memeriksa apakah sub julat yang dibentuk oleh [fromIndex, toIndex) berada dalam julat yang dibentuk oleh [0, panjang) . Sekiranya sub-julat itu sah, maka ia mengembalikan batas bawah seperti yang ditunjukkan di bawah:

@Test public void givenSubRange_whenCheckFromToIndex_thenNumber() { int length = 6; assertThat(Objects.checkFromToIndex(2,length,length), is(2)); } @Test(expected = IndexOutOfBoundsException.class) public void givenInvalidSubRange_whenCheckFromToIndex_thenException() { int length = 6; Objects.checkFromToIndex(2,7,length); }

Catatan: Dalam matematik, julat yang diwakili dalam bentuk [a, b) menunjukkan julat itu merangkumi a dan tidak termasuk b. [dan] nyatakan bahawa nombor tersebut disertakan dan (dan) nyatakan bahawa nombor tersebut dikecualikan.

6. Menggunakan checkFromIndexSize

Kaedah ini serupa dengan checkFromToIndex kecuali bahawa daripada memberikan batas atas sub-julat, kami memberikan ukuran dan batas bawah sub-julat.

Sub-julat, dalam hal ini, adalah [fromIndex, fromIndex + size] dan kaedah ini memeriksa bahawa sub julat berada dalam julat yang dibentuk oleh [0, panjang) :

@Test public void givenSubRange_whenCheckFromIndexSize_thenNumber() { int length = 6; assertThat(Objects.checkFromIndexSize(2,3,length), is(2)); } @Test(expected = IndexOutOfBoundsException.class) public void givenInvalidSubRange_whenCheckFromIndexSize_thenException() { int length = 6; Objects.checkFromIndexSize(2, 6, length); }

7. Kesimpulannya

The java.util.Objects kelas dalam JDK 9 meliputi beberapa kaedah utiliti baru. Ini juga menggembirakan kerana kelas perkhidmatan ini telah diperbarui secara berkala sejak diperkenalkan di Java 7.

Kod untuk artikel ini boleh didapati di GitHub.