具有私人修饰符的自我类型

时间:2014-07-16 10:29:14

标签: scala

我想实现一个具有以下自我类型的特征:

trait HasEquipment {
  this: {def loadEquipment: List[Equipment]} =>

  //more methods
}

现在我可以将这个特性混合到类中,这些类必须定义一个" loadEquipment"方法:

case class Course(id: Long) extends HasEquipment {
    def loadEquipment: List[Equipment] = {
        //implementation
    }
}

但是,我不想向所有人公开loadEquipment方法,而只是向特征公开。所以我想要做的是在课程类中使loadEquipment私有,以便只有特征可以访问它。将其设为私有可防止特征访问该方法。

还有另一种方法可以让loadEquipment只能从特质中获取吗?

1 个答案:

答案 0 :(得分:2)

不确定为什么要在这里使用自我类型。受保护的抽象成员也可以正常工作:

trait HasEquipment {
  protected def loadEquipment: List[Equipment]
}

case class Course(id: Long) extends HasEquipment {
  override protected def loadEquipment: List[Equipment] = ???
}

作为旁注,Scala中的结构类型使用反射,这就是它们通常被避免的原因。