不能使用解构声明
我有一个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)
在文档中不是很清楚,但官方参考:
来自Marko Topolnik评论:
如果由于某种原因某人不能使用数据类,则不是强制性的。 您可以在任何类中声明函数component1()
和component2()
。
如果你只是让IDE为你做一些工作,这是非常有用的。 下面是IntelliJ IDEA给出的建议,帮助解决错误:
它基本上列出了所有的选择: data
类可能是最简单的一个。 您也可以手动创建相应的componentX
函数,否则这些函数会自动为data
类生成。 在这个SO线程中 ,我给出了这种函数的一些信息。
至于你的例子,我将展示如何使用扩展函数提供componentX
函数。 无论何时使用无法修改自己的类时,此方法都非常有用。 就这么简单:
private operator fun Person.component1() = name private operator fun Person.component2() = age
- 将Java Parcel创建者代码转换为Kotlin
- java.lang.RuntimeException:java.lang.RuntimeException:com.android.builder.dexing.DexArchiveMergerException:无法合并dex
- Kotlin静态方法和variables
- 如果在Kotlin中找不到可搜索的元素,我应该返回什么?
- Kotlin:Gradle增量编译
- 智能转换为“types”是不可能的,因为“variables”是一个可以改变的可变属性
- 如何在Kotlin的片段中设置微调器中的addapter?
- 未解决的参考
- 命名条件if-value用于if块