Java 9 java.util.Objects Ergänzungen

1. Einleitung

Die Klasse java.util.Objects ist 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, Nullprüfungen usw. ausgeführt werden können.

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

2. Die requireNonNullElse- Methode

Diese Methode akzeptiert zwei Parameter und gibt den ersten Parameter zurück, wenn er nicht null ist , andernfalls den zweiten Parameter. Wenn beide Parameter null sind , wird eine NullPointerException 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 von requireNonNullElseGet

Diese Methode ähnelt requireNonNullElse , außer dass der zweite Parameter eine java.util.function.Supplier- Schnittstelle ist, die eine verzögerte Instanziierung der bereitgestellten Sammlung ermöglicht. Die Lieferantenimplementierung 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 von checkIndex

Diese Methode wird verwendet, um zu überprüfen, ob der Index innerhalb der angegebenen Länge liegt. Es gibt den Index zurück, wenn 0 <= Index <Länge . Andernfalls wird eine IndexOutOfBoundsException ausgelöst, 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 von checkFromToIndex

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 Untergrenze wie unten gezeigt 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); }

Hinweis: 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 von checkFromIndexSize

Diese Methode ähnelt checkFromToIndex, 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 überprüft, ob der Unterbereich innerhalb des durch [0, Länge) 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 Klasse java.util.Objects in JDK 9 behandelt einige neue Dienstprogrammmethoden. Dies ist auch ermutigend, da diese Serviceklasse seit ihrer Einführung in Java 7 regelmäßig aktualisiert wurde.

Den Code für diesen Artikel finden Sie auf GitHub.