Java 9 java.util.Objects Дополнения
1. Вступление
КлассThe java.util.Objects был частью Java с версии 1.7. Этот класс предоставляет статические служебные методы для объектов, которые можно использовать для выполнения некоторых повседневных задач, таких как проверка на равенство, проверкиnull и т. Д.
В этой статье мы рассмотрим новые методы, представленные в классеjava.util.Objects в Java 9.
2. МетодrequireNonNullElse
Этот метод принимает два параметра и возвращает первый параметр, если это неnull, и второй параметр в противном случае. Если оба параметра равныnull, он выбрасываетNullPointerException:
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. ИспользуяrequireNonNullElseGet
Этот метод похож наrequireNonNullElse, за исключением того, чтоthe second parameter, is a java.util.function.Supplier interface which allows a lazy instantiation of the provided collection. РеализацияSupplier отвечает за возврат ненулевого объекта, как показано ниже:
@Test
public void givenObject_whenRequireNonNullElseGet_thenObject() {
List aList = Objects.requireNonNullElseGet(
null, List::of);
assertThat(aList, is(List.of()));
}
4. ИспользуяcheckIndex
Этот метод используется для проверки, находится ли индекс в пределах заданной длины. Возвращает индекс, если0 ⇐ index < length. В противном случае он выдает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. ИспользуяcheckFromToIndex
Этот метод используется для проверки, находится ли данный поддиапазон, сформированный[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. ИспользуяcheckFromIndexSize
Этот метод аналогиченcheckFromToIndex, за исключением того, что вместо верхней границы поддиапазона мы указываем размер и нижнюю границу поддиапазона.
Поддиапазоном в данном случае является[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.
Код для этой статьи можно найтиover on GitHub.