TL;DR
- orElse :
- orElse함수 호출 전 파리미터 other 실행
- orElse호출
- T value null 체크 후 value 또는 other 반환
- orElseGet :
- orElseGet함수 호출 전 파라미터 other(Supplier<.T>) 객체 생성(호출 보류).
- orElseGet호출
- T value null 체크 후 value 또는 other.get() 호출 여부 결정
Optional 코드
public final class Optional<T> {
...
public T orElse(T other) {
return value != null ? value : other;
}
public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}
}
검증
public void findUserEmailOrElse() {
String userEmail = "Empty";
String result = Optional.ofNullable(userEmail)
.orElse(getUserEmail());
System.out.println(result);
}
public void findUserEmailOrElseGet() {
String userEmail = "Empty";
String result = Optional.ofNullable(userEmail)
.orElseGet(this::getUserEmail);
System.out.println(result);
}
private String getUserEmail() {
System.out.println("getUserEmail 호출");
return "mangkyu@tistory.com";
}
결과
getUserEmail 호출
Empty
Empty