不能使用解构声明

我有一个classPerson

 class Person(val name: String, val age: Int) 

我想用这样的Parent来使用Destructuring声明:

 val (name, age) = Person("name", 22) 

但我得到这个错误:

Person类的解构声明初始值设定项必须具有“component1()”函数Person类的解构声明初始值设定项必须具有“component2()”函数

我们需要将Person声明为数据类。

 data class Person(val name: String, val age: Int) 

在文档中不是很清楚,但官方参考:

https://kotlinlang.org/docs/reference/multi-declarations.html#example-returning-two-values-from-a-function

来自Marko Topolnik评论:
如果由于某种原因某人不能使用数据类,则不是强制性的。 您可以在任何类中声明函数component1()component2()

如果你只是让IDE为你做一些工作,这是非常有用的。 下面是IntelliJ IDEA给出的建议,帮助解决错误:

在这里输入图像说明

它基本上列出了所有的选择: data类可能是最简单的一个。 您也可以手动创建相应的componentX函数,否则这些函数会自动为data类生成。 在这个SO线程中 ,我给出了这种函数的一些信息。

至于你的例子,我将展示如何使用扩展函数提供componentX函数。 无论何时使用无法修改自己的类时,此方法都非常有用。 就这么简单:

 private operator fun Person.component1() = name private operator fun Person.component2() = age