前言
Kotlin是一種在Java虛擬機上運行的靜態(tài)類型編程語言,被稱之為Android世界的Swift,在GoogleI/O2017中,Google宣布Kotlin成為Android官方開發(fā)語言

什么是解構(gòu)聲明
把一個對象可以解構(gòu)成多個對象的聲明方式叫做解構(gòu)聲明
解構(gòu)聲明的使用
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)就是解構(gòu)的聲明方式,并且打印結(jié)果是
Mike
28
結(jié)構(gòu)聲明只能在局部變量
如果聲明在成員變量會提示
destructuring declarations are only allowed for local variables/values
結(jié)構(gòu)聲明默認只支持data數(shù)據(jù)類對象,普通類不支持
當我們使用解構(gòu)聲明時,編譯器會生成這樣的代碼
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()的返回值,并且這兩個函數(shù)都是data class編譯后直接產(chǎn)生的,所以可以可以直接使用解構(gòu)的方式聲明,普通類如果需要使用解構(gòu)聲明則需要手動定義這些函數(shù)
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)
}
}
使用解構(gòu)聲明在循環(huán)和lambda中
可以直接使用解構(gòu)聲明的方式接收元素
fun test() {
val persons = listOf<Person>(Person("張三", 11), Person("", 12), Person("Mike", 13))
for ((name, age) in persons) {
}
persons.forEach { (name, age) ->
}
}
用于函數(shù)返回多個變量
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()
解構(gòu)中不使用的變量
使用-表示不使用的變量,編譯器則不會生成此變量
val (name,_) = Person(“Mike”,28)
注意點
需要注意,在進行解構(gòu)聲明時,命名的位置會和數(shù)據(jù)類的變量位置對應(yīng),防止解構(gòu)變量命名位置放反,造成不必要的麻煩
data class Person(val name: String, val age: Int)
fun test(){
val (age,name) = Person(“Mike”,28)//位置放反使用起來會造成混淆
}
歡迎關(guān)注Mike的簡書
Android知識整理