【问题标题】:Make inherited val public将继承的 val 公开
【发布时间】:2015-04-11 17:02:50
【问题描述】:

存在(在我的代码之外)

trait Foo {
  protected val bar = 0
}

我想要一个类 FooImpl 扩展 Foo 并使 bar 公开。

我听说子类可以增加其继承成员的可见性。

我该怎么做?


我试过了

class FooImpl extends Foo {
  override val logger = super.logger
}

但得到了错误:

super may be not be used on value logger

【问题讨论】:

    标签: scala protected access-modifiers


    【解决方案1】:

    如果您将 logger 设为 def 而不是 val,它会起作用。

    trait Foo {
        protected def logger = 0
    }
    
    class FooImpl extends Foo {
        override val logger = super.logger
    }
    

    如果Foo 不是您定义的,那么在涉及反射的解决方案之外,您可能运气不佳。

    请参阅 thisthis

    【讨论】:

    • 你不能反过来使用def吗? override def logger = super.logger?
    • 不是这样吗?除非你的意思是让他们都定义。
    【解决方案2】:

    您可以提高方法的可见性。

    当您声明具有更广泛可见性的字段时,您声明新字段

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多