kotlin中的属性可以在init块中初始化:
val a: String init { a = "aaa" }
我可以在init块中通过委托初始化属性吗?
属性委派只能在声明属性(或局部变量,因为1.1)的情况下完成,以后不能在 init 块中执行 . 您可以在Kotlin语法_2490641中看到这个定义:
init
property : modifiers ("val" | "var") typeParameters? (type ".")? (multipleVariableDeclarations | variableDeclarationEntry) typeConstraints ("by" | "=" expression SEMI?)? (getter? setter? | setter? getter?) SEMI? ;
解释语法的这一部分是没有用的,但你可以很快看到它描述了属性声明,它在开头总是包含一个 val 或 val ,然后在某个地方有 by 的委托,然后是 expression 描述代表 .
val
by
expression
语法中只有一个 by 关键字的外观,当然它是用于类授权的时候 .
您可以委托给另一个房产 .
class Foo { private val del: ReadWriteProperty<Foo, String> init { del = Delegates.notNull() } val bar by del }
2 回答
属性委派只能在声明属性(或局部变量,因为1.1)的情况下完成,以后不能在
init
块中执行 . 您可以在Kotlin语法_2490641中看到这个定义:解释语法的这一部分是没有用的,但你可以很快看到它描述了属性声明,它在开头总是包含一个
val
或val
,然后在某个地方有by
的委托,然后是expression
描述代表 .语法中只有一个
by
关键字的外观,当然它是用于类授权的时候 .您可以委托给另一个房产 .