オプション
8669 ワード
オプションオブジェクトは、NPEの生成を回避するために使用されます.
public class Optional_test {
public static void main(String[] args) {
Optional<String> stropt = Arrays.asList("dsg", "kmb").stream().findFirst(); // .findFirst() : 먼저나온것을 가져온다
// 1) .get() : Optional 객체에서 값을 가져올때
System.out.println("1) stropt : " + stropt.get());
// 2) .orElseGet() : Optional 객체에 값에 상관없이 새 객체로 생성할때
System.out.println("2) stropt : " + stropt.orElseGet(String::new));
// 3) .orElseThrow() : null을 허용하지않을때 null이 넘어올경우 발생시킬 예외를 지정해줄때
System.out.println("3) stropt : " + stropt.orElseThrow(IllegalArgumentException::new));
// 4-1) .of() : 특정값을 보낼때 NPE 발생할수있음 vs ofNullable(), ifPresent()
//Optional.of(null).ifPresent(s -> System.out.println(s));
// 4-2) ofNullable() : null이 있더라도 NPE 발생하지않고 아무것도 안나옴 --> 즉 null 이 발생할수도있는 값이 들어올때 방어로직으로 사용
Optional.ofNullable(null).ifPresent(s -> System.out.println(s)); // 아무값도 안나옴(빈공간)
// 4-3) .ofNullable() : ofNullable()내부의 매개변수값이 null 이면 --> Optional.empty
String str = null;
var str1 = Optional.ofNullable(str);
System.out.println("4-3) str1 : " + str1); // str1 : Optional.empty
// 4-3) ofNullable().orElse() : ofNullable() 내부의 매개변수값이 null이라면 .orElse() 메서드 활용해서 어떤 메세지를 나오게 할지 정함
var str2 = Optional.ofNullable(str).orElse("null");
System.out.println("4-3) str2 : " + str2);
// 4-4) Wrapper 클래스는 null 값을 허용
Integer int1 = null;
var integer = Optional.ofNullable(int1).orElse(0);
System.out.println("4-4) integer : " + integer);
}
}
結果は次のとおりです.Reference
この問題について(オプション), 我々は、より多くの情報をここで見つけました https://velog.io/@minbo2002/optional-객체テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol