Scala 带私有修饰符的Self类型
我想实现一种自我类型的特质,如下所示:Scala 带私有修饰符的Self类型,scala,Scala,我想实现一种自我类型的特质,如下所示: trait HasEquipment { this: {def loadEquipment: List[Equipment]} => //more methods } 现在我可以将这个特性混合到类中,这些类必须定义一个“loadEquipment”方法: 然而,我不想把loadEquipment方法公开给每个人,而只公开给trait。所以我想做的是将loadEquipment设置为课程类中的私有,以便只有trait可以访问它。将其设为私有
trait HasEquipment {
this: {def loadEquipment: List[Equipment]} =>
//more methods
}
现在我可以将这个特性混合到类中,这些类必须定义一个“loadEquipment”方法:
然而,我不想把loadEquipment
方法公开给每个人,而只公开给trait。所以我想做的是将loadEquipment
设置为课程类中的私有,以便只有trait可以访问它。将其设为私有将阻止trait访问该方法
是否有另一种方法可以使装载设备只能从trait内部访问?不确定您为什么要在此处使用self-type。一个抽象的、受保护的成员也可以工作:
trait HasEquipment {
protected def loadEquipment: List[Equipment]
}
case class Course(id: Long) extends HasEquipment {
override protected def loadEquipment: List[Equipment] = ???
}
另一方面,Scala中的结构类型使用反射,这就是通常避免使用反射的原因
trait HasEquipment {
protected def loadEquipment: List[Equipment]
}
case class Course(id: Long) extends HasEquipment {
override protected def loadEquipment: List[Equipment] = ???
}