Scala 限定内在特质';方法,使其从外部是私有的,但从内部可以访问

Scala 限定内在特质';方法,使其从外部是私有的,但从内部可以访问,scala,private,traits,Scala,Private,Traits,我想限定一个内部特征的方法,这样它只能被外部特征的子类访问。例如: trait Tree[A] { trait TNode { final def prevOption: Option[TNode] = Option(prev) protected[Tree] def prev: TNode // ! } def test(n: TNode): Option[TNode] = Option(n.prev) } 如何修改prev的限定符,以便编译以下: trait

我想限定一个内部特征的方法,这样它只能被外部特征的子类访问。例如:

trait Tree[A] {
  trait TNode {
    final def prevOption: Option[TNode] = Option(prev)
    protected[Tree] def prev: TNode // !
  }

  def test(n: TNode): Option[TNode] = Option(n.prev)
}
如何修改
prev
的限定符,以便编译以下

trait TreeImpl[A] extends Tree[A] {
  def test2(n: TNode): Option[TNode] = Option(n.prev)
}
def test3[A](t: Tree[A]#TNode) = t.prev
虽然此不编译:

trait TreeImpl[A] extends Tree[A] {
  def test2(n: TNode): Option[TNode] = Option(n.prev)
}
def test3[A](t: Tree[A]#TNode) = t.prev

(也就是说,公共
def prev:TNode
不是一个选项)。

这似乎是不可能的

一种可能的解决方法是在树上使用受保护的访问器方法,如下所示(我删除了一些内容,以使代码更清晰):