1. введение
Java.util.Класс Objects является частью Java с версии 1.7. Этот класс предоставляет статические служебные методы для объектов, которые могут быть использованы для выполнения некоторых повседневных задач, таких как проверка на равенство, null проверки и т. Д.
В этой статье мы рассмотрим новые методы, представленные в файле java.util.Объекты класс в Java 9.
2. Метод requirenonnull
Этот метод принимает два параметра и возвращает первый параметр , если он не является null , второй параметр в противном случае. Если оба параметра равны null , он вызывает NullPointerException :
private ListaMethodReturningNullList(){ 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. Использование requireNonNull Else Get
Этот метод аналогичен requireNonNull Else , за исключением того, что вторым параметром является java.util.function.Supplier интерфейс, который позволяет лениво создавать экземпляр предоставленной коллекции. Реализация Поставщик отвечает за возврат ненулевого объекта, как показано ниже:
@Test public void givenObject_whenRequireNonNullElseGet_thenObject() { ListaList = Objects. requireNonNullElseGet( null, List::of); assertThat(aList, is(List.of())); }
4. Использование CheckIndex
Этот метод используется для проверки того, находится ли индекс в пределах заданной длины. Он возвращает индекс, если 0 < длина . В противном случае он выдает исключение IndexOutOfBoundsException , как показано ниже:
@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. Использование check From To Index
Этот метод используется для проверки того, находится ли данный поддиапазон, образованный [fromIndex, toIndex) , в пределах диапазона, образованного [0, length) . Если поддиапазон допустим, то он возвращает нижнюю границу, как показано ниже:
@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); }
Примечание: В математике диапазон, представленный в виде [a, b), указывает, что диапазон включает a и исключает b. [ и ] утверждают, что число включено, и ( и ) утверждают, что число исключено.
6. Использование проверки размера fromIndex
Этот метод аналогичен check From To Index за исключением того, что вместо предоставления верхней границы поддиапазона мы предоставляем размер и нижнюю границу поддиапазона.
Поддиапазон в данном случае равен [fromIndex, fromIndex + size) и этот метод проверяет, что поддиапазон находится в пределах диапазона, образованного [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. Заключение
Файл java.util.Класс Objects в JDK 9 охватывает несколько новых служебных методов. Это также обнадеживает, потому что этот класс обслуживания регулярно обновляется с тех пор, как он был представлен в Java 7.
Код для этой статьи можно найти на GitHub .