如何在一行中声明多个属性

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" }

等等。