Kotlin中可以实现非数据类的自定义解构吗?
在Kotlin数据类中可以像这样解构:
fun main(args: Array<String>) { val thing = Stuff(1, "Hi", true) val(thing1, thing2, thing3) = thing println(thing1) } data class Stuff(val thing1: Int, val thing2: String, val thing3: Boolean)
我可能会误读文档,也许我找不到示例,但我正在寻找一种方法来实现非数据类的自定义解构。 Kotlin可能吗?
我能够做到这样的工作:
fun main(args : Array<String>) { val person = Person("first", "last") val(param1, param2) = person println(param1) println(param2) } class Person(val firstName: String, val lastName: String) { operator fun component1() = firstName operator fun component2() = lastName }
解构是通过调用正在解构的实例上的函数component1
, component2
, component3
等来执行的。
这些函数可以是在你的类中声明的成员函数,也可以是扩展函数。 另外组件函数也必须有operator
关键字来表示它们要满足一个约定,即解构一个约定。
对于数据类,编译器为其主构造函数中声明的每个数据类属性生成相应的组件函数。
具有自定义组件功能的类的示例:
class Result(val e: Exception?) { val hasFailed = e != null operator fun component1(): Exception? = e operator fun component2(): Boolean = hasFailed } val (e, hasFailed) = Result(RuntimeException())