optional 처리 null 을 어떻게 사용 하 는 지 가르쳐 드릴 게 요.

1.NullPointer Exception 에 대해 이야기 합 니 다.
자바 개발 에 비해 만 나 는 것NullPointerException이 낯 설 지 않 을 것 이다.개발 할 때NullPointerException이상 이 없 을 것 이 라 고 생각 하고 결국 생산 환경 에 이 르 러 의외 의 놀 라 움 을 줄 것 이다.그러나 개발 할 때 처리 대상 이 비어 있 는 것 은 보통if(null != xxx)을 사용 하거나 일부 도구 류 를 사용한다.예 를 들 어if(ObjectUtils.isEmpty(xxx))이런 처 리 는 우리 의 코드 를 비대 하 게 만 들 고 한 대상 을 만 났 을 때 이렇게 해 야 한 다 는 것 을 알 수 있다.Optional종 류 를 사용 하면 프로그램 에서 한 무더기 의if를 사용 하여 빈 것 을 처리 하 는 것 을 피 할 수 있다.다음 표Optional클래스 의 방법 을 보 여 줍 니 다.
방법
묘사 하 다.
empty
Optional인 스 턴 스 를 되 돌려 줍 니 다.
of
지 정 된 값 을Optional봉 하여 되 돌려 주 고,값 이null이면 이상 던 지기NullPointerExceptionofNullable
지정 값 을Optional봉 하여 되 돌려 주 고,값 이null이면 빈Optional대상 으로 되 돌려 줍 니 다.
get
값 이 존재 하면 이 값 을 되 돌려 줍 니 다.그렇지 않 으 면NullPointerException이상 을 던 집 니 다.
isPresent
검사 값 이 존재 하 는 지,반환 이 존재 하 는 지true,그렇지 않 으 면 반환falseifPresent
값 이 존재 하면 이 값 을 사용 하 는 방법 으로 호출 합 니 다.그렇지 않 으 면 아무것도 하지 않 습 니 다.
filter
값 이 존재 하고 제 공 된 서술 어 를 만족 시 키 면 이 값 을 포함 하 는Optional대상 을 되 돌려 줍 니 다.그렇지 않 으 면 빈Optional대상 을 되 돌려 줍 니 다.
map
값 이 존재 하면 이 값 에 제공 하 는mapping함수 호출
flatMap
값 이 존재 하면 이 값 에 제 공 된mapping함수 호출 을 실행 하고Optional형식의 값 을 되 돌려 줍 니 다.그렇지 않 으 면 빈Optional대상 을 되 돌려 줍 니 다.
orElse
값 이 존재 하면 되 돌려 줍 니 다.그렇지 않 으 면 지정 한 값 을 되 돌려 줍 니 다.
orElseGet
값 이 존재 하면 되 돌려 줍 니 다.그렇지 않 으 면 지정 한Supplier인터페이스 에서 생 성 된 값 을 되 돌려 줍 니 다.
orElseThrow
값 이 존재 하면 되 돌려 줍 니 다.그렇지 않 으 면 지정 한Supplier인터페이스 에서 생 성 된 이상 을 던 집 니 다.
다음은 위 에 열거 한 방법 을 상세 하 게 사용 하 겠 습 니 다.
2.Optional 클래스 사용
2.1 empty

Optional<User> user = Optional.empty();
빈 대상 만 들 기Optional2.2 of

User user = null;
Optional<User> optional = Optional.of(user);
user이 비어 있 고 직접 보고NullPointerException가 이상 하기 때문에 이 방법 은 일반적으로 매우 적다.
2.3 ofNullable

User user = null;
Optional<User> optional = Optional.ofNullable(user);
user비어 있 으 면 빈Optional대상 으로 돌아간다.
2.4 get

User user = null;
Optional<User> optional = Optional.ofNullable(user);
optional.get();
Optional에서 값 을 얻 고 값 이 존재 하지 않 으 면 다음 과 같은 이상 을 던 집 니 다.java.util.NoSuchElementException: No value present2.5 isPresent

User user = null;
Optional<User> optional = Optional.ofNullable(user);
optional.isPresent();
상기 예 반환false,user이 비어 있 지 않 으 면 반환true2.6 ifPresent

User user = null;
Optional<User> optional = Optional.ofNullable(user);
optional.ifPresent(us->{
	//user   ,   
});
2.7 filter

User user = new User();
user.setName(" A");
boolean result = Optional.ofNullable(user).filter(us -> " A".equals(us.getName())).isPresent();
사용자 이름 A이면 되 돌아 오기true,그렇지 않 으 면 되 돌아 오기false2.8 map

User user = new User();
user.setName(" A");
String name = Optional.ofNullable(user).map(User::getName).get();
user이 비어 있 지 않 으 면name속성 을 추출 하여get()사용 하여 얻 을 수 있 습 니 다.여기name가 비어 있 으 면 이상 을 보고 하기 때문에 기본 값 을 지정 하거나 사용자 정의 이상 을 사용 합 니 다.

String name = Optional.ofNullable(user).map(User::getName).orElse("");
혹시

String name = Optional.ofNullable(user)
                .map(User::getName)
                .orElseThrow(()->new RuntimeException("       "));
2.9 flatMap
이 방법 은 보통 클래스 에서 다른 클래스 의 특정한 속성 을 얻 는 데 사 용 됩 니 다.예 를 들 어 한 반 에 학생 이 있 고 학생 안에 주소 가 있 습 니 다.지금 은 이 반 의 한 학생 의 주 소 를 가 져 와 야 합 니 다.예전 의 쓰기 방법 에 따라:

Address address = new Address();
address.setAddr("   ");

Student student = new Student();
student.setName(" A");
student.setAddress(address);

Grade grade = new Grade();
grade.setName("   2 ");
grade.setStudent(student);

if(!ObjectUtils.isEmpty(grade)){
    Student student1 = grade.getStudent();
    if(!ObjectUtils.isEmpty(student1)){
        Address address1 = student1.getAddress();
        if(!ObjectUtils.isEmpty(address1)){
            System.out.println(address1.getAddr());
        }
    }
}
절차 에 문제 가 없 도록 많은if을 써 서 판단 한다.다음은flatMap으로 어떻게 실현 되 는 지 살 펴 보 자.

Optional.ofNullable(grade)
                .flatMap(g->Optional.ofNullable(g.getStudent()))
                .flatMap(s->Optional.ofNullable(s.getAddress()))
                .map(Address::getAddr)
                .orElse("")
혹시

Optional.ofNullable(grade)
        .map(Grade::getStudent)
        .map(Student::getAddress)
        .map(Address::getAddr)
        .orElse("")
2.10 orElse

Optional.ofNullable(grade).orElse(new Grade());
2.11 orElseGet

Optional.ofNullable(grade).orElseGet(()->new Grade());
2.12 orElseThrow

Optional.ofNullable(grade).orElseThrow(()->new RuntimeException("      "));
이상Optional류 의 모든 방법의 사용 이 열거 되 었 다.
여기 서 optional 처리 null 을 어떻게 사용 하 는 지 가르쳐 주 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 optional 처리 null 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기