我想实现一个具有以下自我类型的特征:
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
只能从特质中获取吗?
答案 0 :(得分:2)
不确定为什么要在这里使用自我类型。受保护的抽象成员也可以正常工作:
trait HasEquipment {
protected def loadEquipment: List[Equipment]
}
case class Course(id: Long) extends HasEquipment {
override protected def loadEquipment: List[Equipment] = ???
}
作为旁注,Scala中的结构类型使用反射,这就是它们通常被避免的原因。