Overriding vals in Scala

后端 未结 2 1069
野性不改
野性不改 2020-12-17 05:27

I have tried to override val in Scala as this:

trait T{
  val str: String
}

sealed abstract class Test extends T{
  val str: String = \"str\"
}

class Test1         


        
2条回答
  •  情歌与酒
    2020-12-17 06:07

    If you do care about it avoiding repeated initialization, you can extract it into a method:

    sealed abstract class Test extends T {
      lazy val str: String = initStr
    
      protected def initStr = "str"
    }
    
    class Test1 extends Test{
      override protected def initStr = super.initStr + "test1"
    }
    

    You can also make str non-lazy, but it's all to easy to end up with initialization order problems that way.

提交回复
热议问题