首页 文章

可以在kotlin中将委托分配给init块中的属性吗?

提问于
浏览
1

kotlin中的属性可以在init块中初始化:

val a: String
init {
    a = "aaa"
}

我可以在init块中通过委托初始化属性吗?

2 回答

  • 1

    属性委派只能在声明属性(或局部变量,因为1.1)的情况下完成,以后不能在 init 块中执行 . 您可以在Kotlin语法_2490641中看到这个定义:

    property
      : modifiers ("val" | "var")
          typeParameters?
          (type ".")?
          (multipleVariableDeclarations | variableDeclarationEntry)
          typeConstraints
          ("by" | "=" expression SEMI?)?
          (getter? setter? | setter? getter?) SEMI?
      ;
    

    解释语法的这一部分是没有用的,但你可以很快看到它描述了属性声明,它在开头总是包含一个 valval ,然后在某个地方有 by 的委托,然后是 expression 描述代表 .

    语法中只有一个 by 关键字的外观,当然它是用于类授权的时候 .

  • 2

    您可以委托给另一个房产 .

    class Foo {
        private val del: ReadWriteProperty<Foo, String> 
        init { del = Delegates.notNull() }
        val bar by del
    }
    

相关问题