Java 9 java.util.Objects Дополнения

Java 9 java.util.Objects Дополнения

1. Вступление

КлассThe java.util.Objects был частью Java с версии 1.7. Этот класс предоставляет статические служебные методы для объектов, которые можно использовать для выполнения некоторых повседневных задач, таких как проверка на равенство, проверкиnull и т. Д.

В этой статье мы рассмотрим новые методы, представленные в классеjava.util.Objects в Java 9.

2. МетодrequireNonNullElse

Этот метод принимает два параметра и возвращает первый параметр, если это неnull, и второй параметр в противном случае. Если оба параметра равныnull, он выбрасывает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, за исключением того, чтоthe second parameter, is a java.util.function.Supplier interface which allows a lazy instantiation of the provided collection. РеализацияSupplier отвечает за возврат ненулевого объекта, как показано ниже:

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

4. ИспользуяcheckIndex

Этот метод используется для проверки, находится ли индекс в пределах заданной длины. Возвращает индекс, если0 ⇐ index < length. В противном случае он выдает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.

Код для этой статьи можно найтиover on GitHub.