Java 9 java.util.Objects Additions

1. Вступ

Клас java.util.Objects є частиною Java з версії 1.7. Цей клас забезпечує статичні методи утиліти для об'єктів, які можна використовувати для виконання деяких повсякденних завдань, таких як перевірка рівності, перевірка нуля тощо.

У цій статті ми розглянемо нові методи, представлені в класі java.util.Objects у Java 9.

2. Метод requireNonNullElse

Цей метод приймає два параметри і повертає перший параметр, якщо він не є нульовим , другий параметр - інакше. Якщо обидва параметри є нульовими , це видає 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. Використання requireNonNullElseGet

Цей метод подібний до requireNonNullElse , за винятком того, що другим параметром є інтерфейс java.util.function.Supplier, який дозволяє лінивий екземпляр наданої колекції. Впровадження Постачальника відповідає за повернення ненульового об'єкта, як показано нижче:

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

4. Використання checkIndex

Цей метод використовується для перевірки, чи індекс не перевищує задану довжину. Він повертає індекс, якщо 0 <= індекс <довжина . В іншому випадку він викидає IndexOutOfBoundsException, як показано нижче:

@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. Використання checkFromToIndex

Цей метод використовується для перевірки, чи не знаходиться заданий піддіапазон, утворений [fromIndex, toIndex) , в діапазоні, сформованому [0, length] . Якщо піддіапазон дійсний, він повертає нижню межу, як показано нижче:

@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); }

Примітка: У математиці діапазон, представлений у формі [a, b), означає, що діапазон включає a і виключає b. [та] зазначити, що число включено, та (і) зазначити, що число виключено.

6. Використання checkFromIndexSize

Цей метод подібний до checkFromToIndex, за винятком того, що замість забезпечення верхньої межі піддіапазону ми вказуємо розмір і нижню межу піддіапазону.

У цьому випадку піддіапазон є [fromIndex, fromIndex + size), і цей метод перевіряє, чи знаходиться діапазон піддіапазону в діапазоні, утвореному [0, length] :

@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. Висновок

Клас java.util.Objects в JDK 9 охоплює декілька нових методів утиліти. Це також обнадіює, оскільки цей клас обслуговування регулярно оновлюється з часу його введення в Java 7.

Код цієї статті можна знайти на GitHub.