[Int, MyClass]의 Map을 인수로 취하는 메서드가 있습니다. 이런 식으로 뭔가 :스칼라 메서드 인수 : 컬렉션의 옵션 또는 기본값
MyMethod라는 (someMap : 맵 [INT, MyClass에])
그러나, someMap은 항상 존재 (스칼라 자바 세계와 없음에 널 (null))하지 않을 수 있습니다. 보기의 API 점에서이 방법의 더 나은 디자인은 다음 중 : MyMethod라는 (someMap : 옵션 [맵 [INT, MyClass에]] = 없음)
옵션에 포장기본 빈 상태 (empty)의 맵을 정의 : MyMethod라는 (someMap : 맵 [INT, MyClass에] = Maps.empty가)
첫 번째 옵션은 우아한 외모, 그러나 그것은 하나가 추가 된 복잡성은 포장한다 지도 (if not (None))을 Some()에서 구현하고 구현 자 (implementor)에서 그것을 unwrap하기 위해 getOrElse를 수행해야한다. 첫 번째 옵션은 API 개체가 실제로 존재하지 않을 수도 있음을 나타냅니다. (없음)
두 번째 옵션에서는 래핑 (일부) 또는 래핑 해제 (unwrapping) 빈 컨테이너는 기존 Map 객체가 없을 때마다 인스턴스화되어야합니다.
또한 옵션 agains 1 : Option 자체가 0 또는 1 항목의 컨테이너이고 Map은 컨테이너 (컬렉션)입니다. 다른 컨테이너에 컨테이너를 포장하는 것이 좋은 디자인입니까?
API 디자인 관점에서 어느 것이 더 나은 접근 방법입니까?
Jean에게 감사드립니다. 따라서 Map에 넣을 객체의 존재 여부는 데이터 기반이며 런타임으로 결정됩니다. 따라서 Option을 사용하면 API 사용자가 Maps가 None이 될 수 있음을 알 수 있습니다. 메소드 btw는 Map이없는 경우에는 다른 동작을 수행해야합니다. Option.foreach/maps가 처리합니다. – exifguy