kotlin学习之解构声明(十二)
生活随笔
收集整理的這篇文章主要介紹了
kotlin学习之解构声明(十二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1. 解構聲明的概念
- 2. 創建變量
- 3. 循環
- 4. 函數
- 5. Map
1. 解構聲明的概念
把一個對象成員解構成多個變量,成為解構函數,component1(),component2()等函數是Kotlin約定的操作符。
解構函數可以用于:
2. 創建變量
data class Person(val name: String, val age: Int)fun main(args: Array<String>) {val (name, age) = Person("person", 1)println(name) println(age) }這樣的寫法實際上就是避免了以往(對象.屬性)調用方式,我們也知道(對象.屬性)實際上就是調用了該類的get方法。通過反編譯得到的代碼為:
public final class HelloKt {public static final void main(@NotNull String[] args) {Person person = new Person("person", true); String str = person.component1(); int age = person.component2();System.out.println(str);System.out.println(age);} }3. 循環
data class Person(val name: String, val age: Int)val list: List<Person> = listOf(Person("one", 1), Person("two", 2), Person("three", 3), Person("four", 4))fun main(args: Array<String>) {list.forEach { (name, age) ->println("name:$name, age:$age")} }反編譯如下:
public final class HelloKt { Iterator iterator = $this$forEach$iv.iterator(); if (iterator.hasNext()) { Object element$iv = iterator.next(); Person $dstr$name$age = (Person)element$iv; String name = $dstr$name$age.component1(); int age = $dstr$name$age.component2();String str = "name:" + name + ", age:" + age;System.out.println(str); } }可以看到$dstr$name$age 該變量存儲了一個People臨時變量,使用方法類似于Lambda表達式。
4. 函數
fun getPair(after: String?, afterAge: Int?): Pair<String, Int> {var name = "yangjin"var age ?: 23return Pair(name, age) }fun main(args: Array<String>) {val (name, age) = getPair("jowan", null)println("name:$name, age:$age"); }反編譯的代碼如下:
public static final Pair<String, Integer> getPair(@Nullable String after, @Nullable Integer afterAge) { String name = "yangjin";int age = 23;name = name;age = (afterAge != null) ? afterAge.intValue() : age;return new Pair(name, Integer.valueOf(age)); }public static final void main(@NotNull String[] args) {Pair pair = getPair("jowan", null); String str1 = (String)pair.component1(); int age = ((Number)pair.component2()).intValue();String str2 = "name:" + str1 + ", age:" + age; boolean bool = false; System.out.println(str2);} }可以看到,函數的這種實現方式實際上就是用Pair來實現的。Pair存在兩個參數,而且其重寫了ComponentN的方法。
5. Map
解構聲明還可以Map中,前提條件是:
通過提供一個iterator()函數將每個映射表示為一個值
通過提供函數component1()和component2()來將每個元素呈現為一對
反編譯的代碼如下:
public static final void main(@NotNull String[] args) {Intrinsics.checkParameterIsNotNull(args, "args"); Map $this$forEach$iv = map; Map map1 = $this$forEach$iv; Iterator iterator = map1.entrySet().iterator(); if (iterator.hasNext()) { Map.Entry element$iv = (Map.Entry)iterator.next(), $dstr$name$age = element$iv; Map.Entry entry = $dstr$name$age; String name = (String)entry.getKey(); int age = ((Number)entry.getValue()).intValue();String str = "name:" + name + ", age:" + age;System.out.println(str); } } 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的kotlin学习之解构声明(十二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kotlin之重载运算符(十一)
- 下一篇: kotlin学习之集合(十三)