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

时间:2018-04-20 12:45:40

标签: kotlin

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

您可以委托给另一家酒店。

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