如何通过组合其他对象的API来创建API外观?

Ham*_*amy 2 scala

我在Scala中有许多无状态对象,我想将它们组合成一个API - 一种外观如下:

object tools {
   // List all methods in toolA

   // List all methods in toolB

   // List all methods in toolC

}
object ToolA { ... }
object ToolB { ... }
object ToolC { ... }
Run Code Online (Sandbox Code Playgroud)

显然,这是烦人在维护列表tools中的方法ToolA,ToolBToolC正在改变很多.A/B/C中没有状态,也没有设置参数.

有什么要说的途径...... "使tools包含集合中的所有的方法中ToolA,ToolBToolC"

Fel*_*ier 6

将ToolA,B和C定义为特征

trait ToolA {
    //stateless methods in ToolA
}
Run Code Online (Sandbox Code Playgroud)

那你可以做

object tools extends ToolA with ToolB with ToolC
Run Code Online (Sandbox Code Playgroud)

您还可以只为ToolA,ToolB和ToolC提供辅助对象

object toolA extends ToolA
object toolB extends ToolB
object toolC extends ToolC
Run Code Online (Sandbox Code Playgroud)

  • Scala中`trait'的扩展功能非常强大.您至少应该意识到特征不仅限于定义纯抽象类型(没有实现).事实上,它们可以自由地混合抽象(未实现)和具体(实现)的值和方法.它们最大的限制是缺少构造函数参数. (2认同)