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

时间:2016-03-05 23:35:49

标签: scala

我不确定为什么这不会编译 - 我试图使用内部类(或特征),以便其他对象可以使用结果" RequestReturn&#34 ;但是,只有Trait Request及其后代才能构建该对象。我可能采取了错误的方法,但这段代码不应该在逻辑上有效吗?我已将RequestReturn构造函数标记为protected [Request],因此可以理解类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)无法在特征RequestContinue中访问类RequestReturn中的构造函数RequestReturn  不允许访问受保护的构造函数RequestReturn,因为  在包....中包含特征RequestContinue不是它的子类  class Trade请求返回特定于目标的请求   override def fulfill(item:Boolean):RequestReturn = new RequestReturn(item)                                                      ^

1 个答案:

答案 0 :(得分:4)

规则为here

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

您可以在Request for your case中定义受保护的工厂方法。