Ajouts java.util.Objects à Java 9

Java 9 java.util.Objects Additions

1. introduction

La classeThe java.util.Objects fait partie de Java depuis la version 1.7. Cette classe fournit des méthodes utilitaires statiques pour les objets qui peuvent être utilisées pour effectuer certaines des tâches quotidiennes telles que la vérification de l'égalité, les vérifications denull, etc.

Dans cet article, nous examinerons les nouvelles méthodes introduites dans la classejava.util.Objects de Java 9.

2. La méthoderequireNonNullElse

Cette méthode accepte deux paramètres et renvoie le premier paramètre s'il ne s'agit pas denull, le second paramètre sinon. Si les deux paramètres sontnull, il renvoieNullPointerException:

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. Utilisation derequireNonNullElseGet

Cette méthode est similaire àrequireNonNullElse, sauf quethe second parameter, is a java.util.function.Supplier interface which allows a lazy instantiation of the provided collection. L'implémentation deSupplier est responsable du retour d'un objet non nul comme indiqué ci-dessous:

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

4. Utilisation decheckIndex

Cette méthode est utilisée pour vérifier si l'index est dans la longueur donnée. Il renvoie l'index si0 ⇐ index < length. Sinon, il lance unIndexOutOfBoundsException comme indiqué ci-dessous:

@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. Utilisation decheckFromToIndex

Cette méthode est utilisée pour vérifier si la sous-plage donnée formée par[fromIndex, toIndex) est dans la plage formée par[0, length). Si la sous-plage est valide, elle renvoie la limite inférieure comme indiqué ci-dessous:

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

Remarque: en mathématiques, une plage représentée sous la forme [a, b) indique que la plage inclut un a et exclusive de b. [et] déclarent que le nombre est inclus et (et) déclarent que le nombre est exclu.

6. Utilisation decheckFromIndexSize

Cette méthode est similaire àcheckFromToIndex sauf qu'au lieu de fournir la limite supérieure de la sous-plage, nous fournissons la taille et la limite inférieure de la sous-plage.

La sous-plage, dans ce cas, est[fromIndex, fromIndex + size) et cette méthode vérifie que la sous-plage est dans la plage formée par[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. Conclusion

La classejava.util.Objects dans JDK 9 couvre quelques nouvelles méthodes utilitaires. C'est également encourageant, car cette classe de service a été régulièrement mise à jour depuis son introduction dans Java 7.

Le code de cet article se trouveover on GitHub.