前言
Kotlin
是一种在Java
虚拟机上运行的静态类型编程语言,被称之为Android
世界的Swift
,在Google
I/O2017中,Google
宣布Kotlin
成为Android
官方开发语言
什么是解构声明
把一个对象可以解构成多个对象的声明方式叫做解构声明
解构声明的使用
data class Person(val name: String, val age: Int)
class Call{
fun test(){
val (name,age) = Person("Mike",28)
println(name)
println(age)
}
}
其中(name,age)
就是解构的声明方式,并且打印结果是
Mike
28
结构声明只能在局部变量
如果声明在成员变量会提示
destructuring declarations are only allowed for local variables/values
结构声明默认只支持data数据类对象,普通类不支持
当我们使用解构声明时,编译器会生成这样的代码
fun test(){
val (name,age) = Person("Mike",28)
}
//编译后
public final void test() {
Person var3 = new Person("Mike", 28);
String var1 = var3.component1();
int age = var3.component2();
}
data class Person(val name: String, val age: Int)
//编译后
public final class Person {
@NotNull
private final String name;
private final int age;
public Person(@NotNull String name, int age) {
super();
this.name = name;
this.age = age;
}
@NotNull
public final String component1() {
return this.name;
}
public final int component2() {
return this.age;
}
}
name
就相当于是component1()的返回值,age就相当于是component2()的返回值,并且这两个函数都是data class编译后直接产生的,所以可以可以直接使用解构的方式声明,普通类如果需要使用解构声明则需要手动定义这些函数
class Person(val name: String,val age: Int){
operator fun component1(): String { return name }
operator fun component2(): Int { return age }
}
class Call{
fun test(){
val (name,age) = Person("Mike",28)
}
}
使用解构声明在循环和lambda中
可以直接使用解构声明的方式接收元素
fun test() {
val persons = listOf<Person>(Person("张三", 11), Person("", 12), Person("Mike", 13))
for ((name, age) in persons) {
}
persons.forEach { (name, age) ->
}
}
用于函数返回多个变量
data class CallResult(val errorCode:Int,val errorMsg:String)
fun httpCall():CallResult{
val errorCode = 500
val errorMsg = "End of Stream"
return CallResult(errorCode,errorMsg)
}
val (errorCode,errorMsg) = httpCall()
解构中不使用的变量
使用-
表示不使用的变量,编译器则不会生成此变量
val (name,_) = Person(“Mike”,28)
注意点
需要注意,在进行解构声明时,命名的位置会和数据类的变量位置对应,防止解构变量命名位置放反,造成不必要的麻烦
data class Person(val name: String, val age: Int)
fun test(){
val (age,name) = Person(“Mike”,28)//位置放反使用起来会造成混淆
}
欢迎关注Mike的简书
Android知识整理