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] = ???
}