在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)
Run Code Online (Sandbox Code Playgroud)
我可能会误读文档,或者我可能找不到一个例子,但我正在寻找一种方法来实现非数据类的自定义解构.这在Kotlin有可能吗?
拆解是通过调用函数执行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())
Run Code Online (Sandbox Code Playgroud)
我能够使这项工作像这样:
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |