日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kotlin学习之解构声明(十二)

發布時間:2024/2/28 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kotlin学习之解构声明(十二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1. 解構聲明的概念
  • 2. 創建變量
  • 3. 循環
  • 4. 函數
  • 5. Map

把一個對象成員解構成多個變量,成為解構函數,component1(),component2()等函數是Kotlin約定的操作符。

解構函數可以用于:

  • 創建變量
  • 循環
  • 函數
  • map
  • 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);} } 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表達式。

    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的方法。

    解構聲明還可以Map中,前提條件是:

    通過提供一個iterator()函數將每個映射表示為一個值
    通過提供函數component1()和component2()來將每個元素呈現為一對

    val map: Map<String, Int> = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)fun main(args: Array<String>) {map.forEach { (name, age) ->println("name:$name, age:$age")} }

    反編譯的代碼如下:

    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学习之解构声明(十二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。