Optional.empty() : 빈 Optional<T> 객체를 생성한다.
@Test
public void testOptionalEmpty(){
//given
Optional<Student> emptyPerson = Optional.empty();
//when
boolean actual = emptyPerson.isPresent();
//then
assertThat(actual).isFalse();
}
Optional.of() : 들어가는 값이 null이 아닌 경우
@Test
public void testOptionalOf(){
//given
Student std1 = new Student(1L, "김용환");
//when
Optional<Student> optionalStudent = Optional.of(std1);
Student actual = optionalStudent.get();
//then
assertThat(actual.getName()).isEqualTo("김용환");
}
@Test(expected = NullPointerException.class)
public void testOptionalOf_whenStudentIsNull(){
//given
Student std1 = null;
//when
Optional<Student> optionalStudent = Optional.of(std1);
//then
fail("NullPointerException이 발생해야 합니다.");
}
Optional.ofNullable() : 들어가는 값이 null일수도 있고 null이 아닐수도 있음
@Test
public void testOptionalOfNullable(){
//given
Student std1 = null;
//when
Optional<Student> optionalStudent = Optional.ofNullable(std1);
Student student = optionalStudent.orElse(new Student(0L, "미정"));
//then
assertThat(student.getName()).isEqualTo("미정");
}
Optional<T>.orElse()
Optional<T>.orElseGet()
@Test
public void testOrElse(){
//given
String name = "yonghwan";
Optional<String> optionalStudent = Optional.ofNullable(name);
//when
String actual = optionalStudent.orElse(getDefaultName());
// orElse의 경우 getDefaultName()이 호출된다.
// Optional의 값이 null이든 아니든 무조건 호출!!
//then
System.out.println(actual);
assertThat(actual).isEqualTo("yonghwan");
}
@Test
public void testOrElseGet(){
//given
String name = "yonghwan";
Optional<String> optionalStudent = Optional.ofNullable(name);
//when
String actual = optionalStudent.orElseGet(()->getDefaultName());
// orElseGet의 경우 Optional의 값이 null인 경우에만 호출된다.
//then
System.out.println(actual);
assertThat(actual).isEqualTo("yonghwan");
}
private String getDefaultName(){
System.out.println("call getDefaultName()");
return "anonymous";
}
Optional<T>.orElseThrow()
Optional<T>.isPresent()
Optional<T>.ifPresent()
Optional<T>.get()
감싸진 Optional을 풀어 실제 객체를 반환한다.
쓰기 전에 value가 null인지 꼭 확인해주자. (내용물이 null인 경우 NoSuchElementException 발생)
Member member = findById(1).orElseThrow(MemberNotFoundException::new);
String name = member.getName();
https://yonghwankim-dev.tistory.com/566