또 다른 의미 있는 예를 살펴보겠습니다. 우리가 모뎀을 사고 싶다고 가정해 봅시다. 우리는 특정 사이트에서 모뎀 가격에 푸시 알림을 수신하고 개체에 저장 : 그래서, 메소드 매개 변수로 Optionals를 사용하지 않도록하는 솔루션이 있습니다. Optional을 해제할 때 Java의 의도는 반환 유형으로 사용하기 위한 것이었으며, 따라서 메서드가 빈 값을 반환할 수 있음을 나타냅니다. 실제로 Optional을 메서드 매개 변수로 사용하는 관행은 일부 코드 검사기에서도 권장되지 않습니다. 자바 SE 8은 하스켈과 스칼라의 아이디어에서 영감을 자바.util.optional라는 새로운 클래스를 소개합니다. 아래 목록 2와 그림 1에 표시된 것처럼 선택적 값을 캡슐화하는 클래스입니다. 그림 2에 설명된 대로 Optional값을 포함하거나 값이 포함되어 있지 않은 단일 값 컨테이너로 볼 수 있습니다(다음 „비어 있음”이라고 함). 선택 사항으로 인해 nullable 값을 명시적으로 처리하는 것은 좋은 프로그래밍 연습을 적용하는 방법입니다. 이제 위의 코드를 Java 8에서 리팩터링할 수 있는 방법을 살펴보겠습니다.

비정상적인 종료를 방지하기 위해 Optional 클래스를 사용합니다. 다음 예제에서는 Optional을 사용하고 있습니다. 그래서, 우리의 프로그램은 충돌하지 않고 실행할 수 있습니다. 우리가 사람의 목록을 가지고 있고 우리는 주어진 이름을 가진 사람들을 위해 그 목록을 검색하는 방법을 원한다고 상상해보십시오. 또한 지정된 경우 해당 메서드를 최소한 특정 연령과 일치시키는 방법을 사용하려고 합니다. 이 매개 변수는 선택 사항인 경우: 참고: Java SE 8 람다 및 메서드 참조 구문(„Java 8: Lambdas”참조)과 스트림 파이프라이닝 개념(„Java SE 8 Streams로 데이터 처리”참조)을 브러시해야 합니다. 여기서 getMobileScreenWidth() 메서드를 관찰하면 많은 null 검사가있는 보일러 플레이트 코드가 많이 있습니다. Java 8 이전에는 런타임 NullPointerExceptions를 피하기 위해 이러한 모든 무의미한 작업을 수행해야 합니다. Optional 클래스의 의도는 모든 null 참조를 대체하는 것이 아닙니다. 대신, 그 목적은 더 이해하기 쉬운 API를 디자인하는 데 도움을 주어 메서드의 서명을 읽는 것만으로 선택적 값을 기대할 수 있는지 여부를 알 수 있도록 하는 것입니다.

이렇게 하면 값의 부재를 처리하기 위해 Optional의 래핑을 적극적으로 해제해야 합니다.