Adições java.util.Objects do Java 9

Adições java.util.Objects do Java 9

1. Introdução

A classeThe java.util.Objects faz parte do Java desde a versão 1.7. Esta classe fornece métodos de utilitário estáticos para objetos que podem ser usados ​​para realizar algumas das tarefas diárias, como verificação de igualdade,null verificações, etc.

Neste artigo, veremos os novos métodos introduzidos na classejava.util.Objects em Java 9.

2. O MétodorequireNonNullElse

Este método aceita dois parâmetros e retorna o primeiro parâmetro se não fornull, o segundo parâmetro caso contrário. Se ambos os parâmetros sãonull, ele lançaNullPointerException:

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. UsandorequireNonNullElseGet

Este método é semelhante arequireNonNullElse, exceto quethe second parameter, is a java.util.function.Supplier interface which allows a lazy instantiation of the provided collection. A implementaçãoSupplier é responsável por retornar um objeto não nulo conforme mostrado abaixo:

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

4. UsandocheckIndex

Este método é usado para verificar se o índice está dentro do comprimento especificado. Ele retorna o índice se0 ⇐ index < length. Caso contrário, ele lança umIndexOutOfBoundsException conforme mostrado abaixo:

@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. UsandocheckFromToIndex

Este método é usado para verificar se o sub intervalo dado formado por[fromIndex, toIndex) está dentro do intervalo formado por[0, length). Se o sub-intervalo for válido, ele retornará o limite inferior, como mostrado abaixo:

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

Nota: Em matemática, um intervalo representado na forma de [a, b) indica que o intervalo é inclusivo de a e exclusivo de b. [e] declaram que o número está incluído e (e) declaram que o número foi excluído.

6. UsandocheckFromIndexSize

Este método é semelhante acheckFromToIndex, exceto que, em vez de fornecer o limite superior do subintervalo, fornecemos o tamanho e o limite inferior do subintervalo.

O subintervalo, neste caso, é[fromIndex, fromIndex + size) e este método verifica se o subintervalo está dentro do intervalo formado por[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. Conclusão

A classejava.util.Objects no JDK 9 cobre alguns novos métodos utilitários. Também é encorajador porque essa classe de serviço é atualizada regularmente desde o momento em que foi introduzida no Java 7.

O código para este artigo pode ser encontradoover on GitHub.