지금까지 다룬 Java Optional

10241 단어 Javaoptionaltech
추천하지 않는 사용법을 잊고 재조사했기 때문에 미리 정리했다.
그 부분만 보고 싶으면 맨 밑의 화제로 가자!

optional 정보


자바 8에 추가된 값을 포장할 수 있는 클래스입니다.
랩으로 이것을 감싸서 null 값을 감싸기 때문에 null Pointer Exception 걱정 없이 비교적 깨끗한 null 제어를 할 수 있습니다.
잘 쓰지는 않지만 원시물을 다루는 옵티올류도 따로 존재한다.

상용법


of


Optional 생성
매개변수가 null이면 null Point erException이 발생합니다.
List<String> list = Collections.singletonList("test");
Optional<String> optional = Optiona.of(list.get(0));

ofNullable


Optional 생성
이것은null 대응판입니다.
넘으면 엠티가 돼.
List<String> list = Collections.singletonList(null);
Optional<String> optional = Optional.ofNullable(list.get(0));

empty


하늘을 나타내는 Optional을 생성합니다.
Optional<String> optional = Optional.empty();

isPresent


값을 유지할지 여부입니다.
optional.isPresent();

get


유지치를 얻다.
값이 없으면 NoSuchelementException이 발생하기 때문에 기본적으로 isPresent를 미리 합니다.
optional.get();

orElse


값이 있으면 얻고, 없으면 기본값을 반환합니다.
optional.orElse("empty");

optional.orElse(null);

orElseGet


orele Supplier의 느낌을 주었어요.
이런 상황에서는 평가를 늦추는 것이다.
optional.orElseGet(()->1+1));

orElseThrow


가치가 있으면 얻고, 없으면 Supplier가 납품하는 Exception이 된다.
optional.orElseThrow(Exception::new);

ifPresent


Consumer에 맡기고 값이 있으면 그 값으로 처리합니다.
optional.ifPresent(System.out::println);

map


변환 값.
가치가 없는 경우에empty를 반환합니다.
또한 계산 결과가 null일 때도 empty가 된다.
Optional<Integer> optionalInt = optionalStr.map(t->Integer.parseInt(t));

filter


조건이 충족되면 자신을 반환하고, empty를 반환하지 않으면 반환합니다.
원래 empty인 경우 항상 empty를 반환합니다.
Optional<String> nameOptional = optionalStr.filter(t->t.equals("ayumukob"));

stream


평소에는 자바8이라 못 쓰지만 자바9 이후 버전 업그레이드 후 쓰고 싶은 방법.
값이 있으면 그 값이 있는 Stream을 만들고, 없으면 빈 Stream을 만든다.
Stream<String> stream = optional.stream();

ifPresentOrElse


이것도 못 쓰는 방법이야.이것도 자바9부터 사용할 수 있다.
값이 없는 상황에서도 ifPresent의 느낌을 처리해야 한다.
optional.ifPresentOrElse(System.out::println, ()->System.out.println("nullだよ。"));

주의점


앞부분이 길어졌어요. 이번에 쓰고 싶은 부분은 여기예요!!
Intellij를 사용하여 설치할 때 이러한 경고가 표시됩니다.
'Optional<String>' used as type for parameter 'optional' 
Inspection info: Reports any cases in which java.util.Optional<T>, java.util.OptionalDouble, java.util.OptionalInt, java.util.OptionalLong, or com.google.common.base.Optional are used as types for fields or parameters.
Optional was designed to provide a limited mechanism for library method return types in which a clear way to represent "no result" was needed.
Using a field with the java.util.Optional type is also problematic if the class needs to be Serializable, as java.util.Optional is not serializable.
Optional 클래스는 반환 값의 유형을 명확하게 나타내는'결과가 없다'는 유한한 메커니즘을 제공하는 전제 조건이 있고 반환 값이 아니라 클래스에 사용되는 필드나 파라미터를 제공하는 경우 위반된다.또 엄숙한 관계에서도 옵티올은 엄숙할 수 없어 다나카 경기장에 존재하면 좋지 않다.
즉, Optional은 다음을 권장하지 않습니다!!
  • 클래스 필드
  • 방법의 매개 변수
  • 총결산


    옵티올의 디자인 마인드를 잘 파악해 전철을 밟지 않았으면 좋겠다.

    좋은 웹페이지 즐겨찾기