Scala 中受保护的内部类构造函数



我不确定为什么这不会编译 - 我正在尝试使用内部类(或特征),以便其他对象可以使用生成的"RequestReturn",但只有 Trait Request 及其后代可以首先构造该对象。我可能采取了错误的方法,但这段代码在逻辑上不应该工作吗?我已经将 RequestReturn 构造函数标记为受保护[请求],因此类 RequestContinue 也能够调用构造函数。

trait Request {
  class RequestReturn protected[Request](val x:Any)
  def fulfill(item:Boolean):RequestReturn = new RequestReturn(item) //this line compiles
}
trait RequestContinue extends Request{

  override def fulfill(item:Boolean):RequestReturn = new RequestReturn(item) //this won't compile
}

错误:(19, 54) 构造函数 请求在类中返回 无法在特征中访问请求返回 请求继续 不允许访问受保护的构造函数请求返回,因为 封闭性状请求继续在包中....不是 的子类 类请求返回特征请求,其中定义了目标的请求 override def fulfill(item:boolean):RequestReturn = new RequestReturn(item) ^

规则如下:

从 RequestReturn、后代及其配套模块访问;以及从 Request 及其配套模块访问。

您可以在请求中使用案例中定义受保护的工厂方法。

最新更新