【问题标题】:Protected Inner class constructor in ScalaScala中受保护的内部类构造函数
【发布时间】:2016-06-19 16:12:53
【问题描述】:

我不确定为什么这不会编译 - 我正在尝试使用内部类(或 trait),以便其他对象可以使用生成的“RequestReturn”,但只有 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

}

Error:(19, 54) 类 RequestReturn 中的构造函数 RequestReturn 无法在 trait RequestContinue 中访问 不允许访问受保护的构造函数 RequestReturn,因为 在包中包含特征 RequestContinue .... 不是 定义了目标的 trait Request 中的类 RequestReturn 覆盖 def 完成(项目:布尔值):RequestReturn = new RequestReturn(项目) ^

【问题讨论】:

    标签: scala


    【解决方案1】:

    规则是here:

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

    您可以在 Request 中为您的用例定义一个受保护的工厂方法。

    【讨论】:

      猜你喜欢
      • 2013-11-13
      • 1970-01-01
      • 2010-12-16
      • 2011-05-30
      • 2018-06-15
      • 2014-08-29
      • 2016-04-07
      • 2012-06-04
      • 2020-10-02
      相关资源
      最近更新 更多