Scala - 组织单例对象层次结构的正确方法是什么?

non*_*com 4 inheritance singleton scala object

这是我在Scala中遇到的一些不会导致Java出现任何问题的东西.现在我只是不知道在Scala中这样做的正确方法是什么.

问题描述:我有一个Scala对象,它表示一个'抽象'对象.它打算有一个单一的配置文件,但它并不打算用于实际用途,它只是它的儿童单身人士常见的一堆定义.所以相反,我想用它的孩子.所以有一个问题:因为我不能继承对象,是否应该将常见的单例功能实现为类?作为一个抽象类?特质不适合我,因为它不能有构造函数.如果抽象父类会这样做,那么如果我需要它们,我应该如何访问它的单例(或静态)方法呢?我意识到我的设计可能存在缺陷,但由于我有这个问题并且无法想出任何明确的答案,所以听到你说的话(包括设计备选方案)很有意思.

oxb*_*kes 7

你真的应该使用trait; 不需要构造函数(事实上,它们没有任何意义,因为scala object没有构造函数):

这是共享特征; needA您需要传递给构造函数的值.也就是说,特征的功能需要它.

trait Common {
  def needA: A

  def sharedMethod { /* implement me*/ }
}
Run Code Online (Sandbox Code Playgroud)

然后你的模块看起来像这样:

object Mod1 extends Common {
  val needA = { /* implement me*/ }
}     
object Mod2 extends Common {
  val needA = { /* implement me*/ }
}     
Run Code Online (Sandbox Code Playgroud)

请注意,它们通过使用a val来覆盖a来指定公共功能所需的值def