如何在一行中声明多个属性
How to declare several properties on one line
我正在开发一个 class,其中包含一种类型的多个 lateinit
属性。我认为像这样在单独的行中声明它们太冗长了:
lateinit var a: String
lateinit var b: String
所以我想像这样在一行中声明它们:
lateinit var b, c: String // error: Property getter or setter expected
但是我得到一个错误 Property getter or setter expected
。在 Kotlin 中有什么方法可以在一行中声明多个属性吗?
不,没有办法做到这一点。许多 Java 风格指南不赞成在同一行上声明多个属性,因此我们没有在 Kotlin 中实现对它的支持。
从语法上看这是不可能的:
property (used by memberDeclaration, declaration, toplevelObject)
: modifiers ("val" | "var")
typeParameters? (type "." | annotations)?
(multipleVariableDeclarations | variableDeclarationEntry)
typeConstraints
("by" | "=" expression SEMI?)?
(getter? setter? | setter? getter?) SEMI?
;
您只能使用以下方式进行破坏声明:
val (name, age) = person
您可以使用 kotlin 的 解构声明,但它不适用于 lateinit
前缀。
var (a, b, c, d) = listOf("fly", 23, "slow", 28)
println("$a $b $c $d")
It is a workaround and creates unnecessary list initialization but it gets the job done.
此外,您将无法自己定义变量类型,但在使用解构声明时会自动完成类型推断。
如果你想用相同的值初始化多个字段,你可以这样做:
val (x, y, z) = List(3) { 1 }
val (x, y, z) = List(3) { "Hello" }
等等。
我正在开发一个 class,其中包含一种类型的多个 lateinit
属性。我认为像这样在单独的行中声明它们太冗长了:
lateinit var a: String
lateinit var b: String
所以我想像这样在一行中声明它们:
lateinit var b, c: String // error: Property getter or setter expected
但是我得到一个错误 Property getter or setter expected
。在 Kotlin 中有什么方法可以在一行中声明多个属性吗?
不,没有办法做到这一点。许多 Java 风格指南不赞成在同一行上声明多个属性,因此我们没有在 Kotlin 中实现对它的支持。
从语法上看这是不可能的:
property (used by memberDeclaration, declaration, toplevelObject)
: modifiers ("val" | "var")
typeParameters? (type "." | annotations)?
(multipleVariableDeclarations | variableDeclarationEntry)
typeConstraints
("by" | "=" expression SEMI?)?
(getter? setter? | setter? getter?) SEMI?
;
您只能使用以下方式进行破坏声明:
val (name, age) = person
您可以使用 kotlin 的 解构声明,但它不适用于 lateinit
前缀。
var (a, b, c, d) = listOf("fly", 23, "slow", 28)
println("$a $b $c $d")
It is a workaround and creates unnecessary list initialization but it gets the job done.
此外,您将无法自己定义变量类型,但在使用解构声明时会自动完成类型推断。
如果你想用相同的值初始化多个字段,你可以这样做:
val (x, y, z) = List(3) { 1 }
val (x, y, z) = List(3) { "Hello" }
等等。