Java 9 java.util.Objects-Zusätze

Java 9 java.util.Objects-Ergänzungen

1. Einführung

Die Klasse vonThe java.util.Objectsist seit Version 1.7 Teil von Java. Diese Klasse bietet statische Dienstprogrammmethoden für Objekte, mit denen einige alltägliche Aufgaben wie die Überprüfung auf Gleichheit,null-Überprüfungen usw. ausgeführt werden können.

In diesem Artikel werden die neuen Methoden vorgestellt, die in der Klassejava.util.Objects in Java 9 eingeführt wurden.

2. DierequireNonNullElse-Methode

Diese Methode akzeptiert zwei Parameter und gibt den ersten Parameter zurück, wenn er nichtnull ist, andernfalls den zweiten Parameter. Wenn beide Parameternull sind, wirdNullPointerException ausgelöst:

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. Verwenden vonrequireNonNullElseGet

Diese Methode ähneltrequireNonNullElse, außer dassthe second parameter, is a java.util.function.Supplier interface which allows a lazy instantiation of the provided collection. Die Implementierung vonSupplier ist für die Rückgabe eines Nicht-Null-Objekts verantwortlich, wie unten gezeigt:

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

4. Verwenden voncheckIndex

Mit dieser Methode wird überprüft, ob der Index innerhalb der angegebenen Länge liegt. Es gibt den Index zurück, wenn0 ⇐ index < length. Andernfalls wird einIndexOutOfBoundsException ausgegeben, wie unten gezeigt:

@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. Verwenden voncheckFromToIndex

Diese Methode wird verwendet, um zu überprüfen, ob der durch[fromIndex, toIndex) gebildete Unterbereich innerhalb des durch[0, length) gebildeten Bereichs liegt. Wenn der Unterbereich gültig ist, wird die untere Grenze wie folgt zurückgegeben:

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

Anmerkung: In der Mathematik gibt ein Bereich in Form von [a, b] an, dass der Bereich a einschließt und b ausschließt. [und] geben an, dass die Nummer enthalten ist, und (und) geben an, dass die Nummer ausgeschlossen ist.

6. Verwenden voncheckFromIndexSize

Diese Methode ähneltcheckFromToIndex, außer dass anstelle der Obergrenze des Unterbereichs die Größe und die Untergrenze des Unterbereichs angegeben werden.

Der Unterbereich ist in diesem Fall[fromIndex, fromIndex + size), und diese Methode prüft, ob der Unterbereich innerhalb des durch[0, length) gebildeten Bereichs liegt:

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

Die Klassejava.util.Objects in JDK 9 behandelt nur wenige neue Dienstprogrammmethoden. Erfreulich ist auch, dass diese Serviceklasse seit ihrer Einführung in Java 7 regelmäßig aktualisiert wurde.

Der Code für diesen Artikel lautetover on GitHub.