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.