我有将 [Int, MyClass] 的 Map 作为参数的方法。像这样的东西:
myMethod(someMap : Map[Int, MyClass])
但是, someMap 可能并不总是存在(Java 世界中的 null 和 Scala 中的 None)。从 API 的角度来看,以下哪项是该方法的更好设计:
将其包装在选项中: myMethod(someMap : Option[Map[Int, MyClass]] = None)
定义一个默认的空地图: myMethod(someMap : Map[Int, MyClass] = Maps.empty)
第一个选项看起来很优雅,但是它具有额外的复杂性,即必须在 Some() 中包装 Map(如果不是 None)并且在实现者中必须执行 getOrElse 来解开它。第一个选项还让 api 的使用者清楚地知道,地图对象可能实际上并不存在(无)
在第二个选项中,不必进行包装(在 Some 中)或展开,但每次没有现有 Map 对象时都必须实例化一个空容器。
此外,反对 1 的论点:Option 本身是 0 或 1 项的容器,而 Map 也是一个容器(集合)。将一个容器包裹在另一个容器中是一个好的设计吗?
从 API 设计的角度来看,哪种方法更好?