Java 9 java.util.Objects 추가

1. 소개

java.util.Objects 클래스는 버전 1.7부터 Java의 일부였습니다. 이 클래스는 동등성 검사, 검사 등과 같은 일상적인 작업을 수행하는 데 사용할 수있는 객체에 대한 정적 유틸리티 메서드를 제공합니다 .

이 기사에서는 Java 9 의 java.util.Objects 클래스에 도입 된 새로운 메소드를 살펴볼 것 입니다.

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 사용

이 메소드는 두 번째 매개 변수가 제공된 콜렉션의 지연 인스턴스화를 허용하는 java.util.function.Supplier 인터페이스라는 점을 제외하고 requireNonNullElse 와 유사합니다 . 공급 업체 아래와 같이 구현은 null이 아닌 객체를 반환 할 책임이 있습니다 :

@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. 결론

JDK 9 의 java.util.Objects 클래스는 몇 가지 새로운 유틸리티 메소드를 다룹니다. 또한이 서비스 클래스는 Java 7에 도입 된 이후 정기적으로 업데이트 되었기 때문에 고무적입니다.

이 기사의 코드는 GitHub에서 찾을 수 있습니다.