6 개월 이상 동안 Java 8을 사용하고있는 새로운 API 변경에 매우 만족합니다. 내가 아직도 확신하지 못하는 영역은 언제 사용해야하는지 Optional
입니다. 나는 어디에서나 사용할 수있는 곳 어디에서나 사용하려고하는 것 같습니다 null
.
사용할 수있는 상황이 많이있는 것 같으며 이점 (가독성 / null 안전성)을 추가하거나 추가 오버 헤드를 유발하는지 확실하지 않습니다.
그래서 몇 가지 예가 있으며, Optional
유익한 지에 대한 커뮤니티의 생각에 관심 이 있습니다.
1 - 공공 방법의 반환 형식으로 방법은 반환 할 때 null
:
public Optional<Foo> findFoo(String id);
2-param이 다음 null
과 같은 경우 메소드 매개 변수로 :
public Foo doSomething(String id, Optional<Bar> barOptional);
3-Bean의 선택적 멤버로서 :
public class Book {
private List<Pages> pages;
private Optional<Index> index;
}
4-안으로 Collections
:
일반적으로 나는 생각하지 않습니다 :
List<Optional<Foo>>
값 등 filter()
을 제거 하는 데 사용할 수 있기 때문에 무엇이든 추가 null
하지만 Optional
컬렉션에 잘 사용 됩니까?
내가 놓친 사건이 있습니까?
.filter(Optional::absent)
"널값"을
getOrDefault()
않습니까?
Map<Character, String>
. 대체가 없으면 다음을 사용할 수 있습니다Optional.ofNullable(map.get(c)).orElse(String.valueOf(c))
.. 또한 Optional은 Guava에서 도난 당했으며 훨씬 더 좋은 구문을 가지고 있습니다.Optional.fromNullable(map.get(c)).or(String.valueOf(c));