在Scala中对对象进行别名的“正确”方法是什么?
例如,假设我需要在应用程序的各个部分(范围分为SBT子项目)中使用RoleGroup
trait RoleGroup
object RoleGroup {
case object ADMIN extends RoleGroup
case object MEMBER extends RoleGroup
case object PUBLIC extends RoleGroup
}
由于我不想重复导入RoleGroup,我决定将RoleGroup特征和对象别名化为类型和val对应物,如下所示:
package com.developer
package controller
trait ControllerBase {
type RoleGroup = controller.RoleGroup
val RoleGroup = controller.RoleGroup
...
}
然后子项目包对象可以扩展帮助器特征以获得免费导入:
package com.client
package object member
extends com.developer.controller.ControllerBase
我正在为需要在范围内的其他案例对象做同样的事情。这是一个明智的解决方案吗?即我需要注意哪些缺点/问题?所有编译和浏览器测试页面似乎都在预重构应用程序中运行,但我不确定这是否是最好的方法。
答案 0 :(得分:6)
这是一种明智的做法。事实上it's being applied in the Scala library本身。
您只需要两个可想象的成员级别别名:类型(即特征和类)和值(即对象,包和值)。你把它们都掩盖了。