Scala,在对象初始化时访问成员

标签 scala subclass base-class

class InitializationTest {
  abstract class Base {
    method()
    def method(): Unit
  }

  class Subclass extends Base {
    val obj = new Object
    override def method(): Unit = {
      println(obj) // null
      // How to get the Object here?
    }
  }

  @Test
  def doTest(): Unit = {
    new Subclass()
  }
}

根据我的实验,println(obj) 表达式将输出 null

我的问题是,我是否需要在Subclassmethod中访问obj。如果不将 obj 从 val 更改为 var,我应该做什么,或者我不能做什么?

谢谢。

最佳答案

一种解决方案是将 obj 定义为 lazy val

另一种是使用早期定义:

class Subclass extends {
  val obj = new Object
} with Base {
  override def method(): Unit = {
    println(obj) // not null!
  }
}

可以找到这些解决方案(以及其他一些解决方案)here .

关于Scala,在对象初始化时访问成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39412817/

相关文章:

C++,如何将派生类转换为 protected 基类?

scala - 宏扩展内的隐式搜索失败

scala - 使用 future 时程序不会终止

scala - 如何将迭代器转换为 scalaz 流?

json - read.json 仅读取 Spark 中的第一个对象

c# - 如何在 ASP.NET 页面上使用子类控件?

python - 如何从继承链中上几层的基类调用方法?

python - 如何在子类中使用 "hide"父类(super class)方法

Java:无法覆盖传递子类的抽象方法

c++ - 在从模板化中介派生的类中调用非模板基类构造函数