{"id":16633342,"url":"https://github.com/githubhaohao/javatokotlin","last_synced_at":"2025-10-04T02:30:37.847Z","repository":{"id":49376321,"uuid":"92401505","full_name":"githubhaohao/JavaToKotlin","owner":"githubhaohao","description":"Java to Kotlin 语法清单","archived":false,"fork":false,"pushed_at":"2017-06-28T02:21:15.000Z","size":31,"stargazers_count":82,"open_issues_count":1,"forks_count":21,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-01-13T09:23:18.810Z","etag":null,"topics":["from-java-to-kotlin","java-kotlin","java-to-kotlin","kotlin"],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/githubhaohao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-25T12:32:13.000Z","updated_at":"2025-01-02T23:06:20.000Z","dependencies_parsed_at":"2022-08-25T08:10:55.640Z","dependency_job_id":null,"html_url":"https://github.com/githubhaohao/JavaToKotlin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubhaohao%2FJavaToKotlin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubhaohao%2FJavaToKotlin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubhaohao%2FJavaToKotlin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/githubhaohao%2FJavaToKotlin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/githubhaohao","download_url":"https://codeload.github.com/githubhaohao/JavaToKotlin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235209026,"owners_count":18953005,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["from-java-to-kotlin","java-kotlin","java-to-kotlin","kotlin"],"created_at":"2024-10-12T05:13:10.954Z","updated_at":"2025-10-04T02:30:32.570Z","avatar_url":"https://github.com/githubhaohao.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Java to Kotlin 语法清单\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"http://i1.piimg.com/588795/9c8514f7c56bb889.jpg\"/\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e时刻对新事物保持好奇心\u003c/p\u003e\n\n\u003e Google I/O 2017 宣布在 Android Studio 3.0 将默认支持 Kotlin 用于 Android 开发. 请注意 Google 只是宣布 Kotlin 作为 Android 开发的一级语言，并没有说要用其取代 Java ，这里很多无脑媒体进行了过度解读。作为一名合格的程序员，首先要理性看待技术迭代更新，同时要对新事物保持强烈的好奇心。\n\n## Kotlin 简介\nKotlin 来自于捷克一家牛逼软件研发公司 JetBrains ，很多优秀的 IDE，如 IntelliJ IDEA、PyCharm、WebStorm 等都是它的杰作，包括 Google 官方的 Android IDE -- Android Studio ，也是 IntelliJ IDEA 的插件版。\n\nKotlin 源于 JetBrains 的圣彼得堡团队，名称取自圣彼得堡附近的一个小岛 ( Kotlin Island ) ，JetBrains 在 2010 年首次推出 Kotlin 编程语言，并在次年将之开源。\n\n## Kotlin 的特点\nKotlin 是一个基于 JVM 的编程语言，与 Java 有很深的渊源。它能与 Java 100% 互通，具备诸多 Java 尚不支持的新特性。Kotlin 可以编译成 Java 字节码，也可以编译成 JavaScript ，方便在没有 JVM 的设备上运行，可用于移动端以及 Web 开发，是一种全栈式开发语言。\n\n## Java to Kotlin\n下面是 Java to Kotlin 主要语法，以便于你快速认识 Kotlin 这门语言。\n\n### 变量\n**Java**\n```java\nString lan = \"Hello Kotlin\";\n\nfinal String lan = \"Hello Kotlin\";\n```\n**Kotlin**\n```kotlin\nvar lan = \"Hello Kotlin\"\n\nval lan = \"Hello Kotlin\"\n```\n---\n\n### 打印字符串\n**Java**\n```java\nSystem.out.print(\"Hello Kotlin\");\n\nSystem.out.println(\"Hello Kotlin\");\n```\n**Kotlin**\n```kotlin\nprint(\"Hello Kotlin\");\n\nprintln(\"Hello Kotlin\");\n```\n---\n### 字符串模板\n**Java**\n```java\nString name = \"haohao\";\n\nint age = 25;\n\nString msg = \"I am \" + name + \", \" + age + \" years old.\";\n\nString text = \"Hello Kotlin\\n\" +\n              \"Hello Android\\n\" +\n              \"Hello TensorFlow\";\n```\n**Kotlin**\n```kotlin\nvar name = \"haohao\";\n\nvar age = 25;\n\nvar msg = \"I am $name , $age years old.\";\n\nvar text = \"\"\"\n    |Hello Kotlin    \n    |Hello Android\n    |Hello TensorFlow\n    \"\"\".trimMargin()\n// trimMargin() 去除连接符 `|`\n\n```\n---\n### 空声明\n**Java**\n```java\nString name = null;\n```\n**Kotlin**\n```kotlin\nvar name: String? = null // `?` 声明变量可为 null \n```\n---\n### 判空\n**Java**\n```java\nif (name != null) {\n\n    int len = name.length;\n}\n\n```\n**Kotlin**\n```kotlin\nname?.let{\n\n    val len = name.length\n}\n```\n---\n### 逻辑表达式\n**Java**\n```java\nString y = x \u003e 6 ? \"x \u003e 6\" : \"x \u003c= 6\";\n```\n**Kotlin**\n```kotlin\nvar y = if (x \u003e 6)\n            \"x \u003e 6\"\n        else \"x \u003c= 6\"\n```\n---\n### 类型判断及转换\n**Java**\n```java\nif (obj instanceof Person) {\n\n    Person p = (Person) obj;\n}\n```\n**Kotlin**\n```kotlin\nif (obj is Person) {\n\n    var p = obj //智能转换\n}\n```\n---\n### 区间\n**Java**\n```java\nif (value \u003e= 0 \u0026\u0026 value \u003c= 100) {\n}\n\nfor (int i = 1; i \u003c= 100 ; i++) {}\n\nfor (int i = 1; i \u003c 100 ; i++) {}\n\nfor (int i = 100; i \u003e= 0 ; i--) {}\n\nfor (int i = 1; i \u003c= 100 ; i+=2) {}\n\nfor (int i = 100; i \u003e= 0 ; i-=2) {}\n\n```\n**Kotlin**\n```kotlin\nif (value is 0..100) {\n}\n\nfor (i in 1..100 ) {}\n\nfor (i in 1 until 100) {} // 半开区间：不包含 100\n\nfor (i in 100 downTo 0) {}\n\nfor (i in 1..100 step 2) {}\n\nfor (i in 100 donwTo 1 step 2) {}\n```\n---\n### list 和 map ( 针对 Java 8 之前版本 )\n**Java**\n```java\nList\u003cInteger\u003e list = Arrays.asList(1, 2, 3, 4);\n\nfor(Integer value : list) {\n\n   System.out.println(value);\n}\n\nMap\u003cInteger, String\u003e map = new HashMap\u003c\u003e();\n\nmap.put(1, \"Java\");\n\nmap.put(2, \"Kotlin\");\n\nmap.put(3, \"iOS\");\n\nmap.put(4, \"React Native\");\n\n\nIterator\u003cMap.Entry\u003cInteger, String\u003e\u003e iterator = map.entrySet().iterator();\n\nwhile (iterator.hasNext()) {\n\n    Map.Entry\u003cInteger, String\u003e entry = iterator.next();\n\n    System.out.println(entry.getKey() + \" , \" + entry.getValue());\n}\n\n\n```\n**Kotlin**\n```kotlin\nvar list = listOf(1, 2, 3, 4);\n\nlist.forEach {\n\n   println(it)\n}\n\nvar map = mapOf(1 to \"Java\", 2 to \"Kotlin\", 3 to \"iOS\", 4 to \"React Native\")\n\nmap.forEach { key, value -\u003e\n\n    println(\"$key, $value\")\n}\n\n// 或者\n\nfor ((key, value) in map) {\n\n    println(\"$key, $value\")\n}\n\n```\n---\n### 开关语句\n**Java**\n```java\nint score = // some score\nString grade;\nswitch (score) {\n\tcase 10:\n\tcase 9:\n\t\tgrade = \"Excellent\";\n\t\tbreak;\n\tcase 8:\n\tcase 7:\n\tcase 6:\n\t\tgrade = \"Good\";\n\t\tbreak;\n\tcase 5:\n\tcase 4:\n\t\tgrade = \"Ok\";\n\t\tbreak;\n\tcase 3:\n\tcase 2:\n\tcase 1:\n\t\tgrade = \"Fail\";\n\t\tbreak;\n\tdefault:\n\t    grade = \"Fail\";\t\t\t\t\n}\n```\n**Kotlin**\n```kotlin\nvar score = // some score\nvar grade = when (score) {\n\n\t9, 10 -\u003e \"Excellent\" \n\n\tin 6..8 -\u003e \"Good\"\n\n\t4, 5 -\u003e \"Ok\"\n\n\tin 1..3 -\u003e \"Fail\"\n\n\telse -\u003e \"Fail\"\n}\n```\n---\n### 流水线\n**Java**\n```java\nList\u003cString\u003e list = Arrays.asList(\"java\", \"c++\", \"Android\", \"Kotlin\", \"iOS\");\n\nfor(int i = 0; i \u003c list.size(); i++ ) {\n\n    list.set(i, \"Hello \" + list.get(i));\n\n    if (!list.get(i).contains(\"c\")) {\n\n        System.out.println(list.get(i));\n    }\n}\n\n//输出：\n//    Hello java\n//    Hello Android\n//    Hello Kotlin\n//    Hello iOS\n```\n**Kotlin**\n```kotlin\nvar list = arrayOf(\"java\", \"c++\", \"Android\", \"Kotlin\", \"iOS\")\n\nlist.map {\n\n    \"Hello $it\"\n\n}.filter {\n\n    !it.contains(\"c\")\n\n}.forEach {\n\n    println(it)\n\n}\n\n//输出：\n//    Hello java\n//    Hello Android\n//    Hello Kotlin\n//    Hello iOS\n```\n---\n### 函数\n**Java**\n```java\npublic final void func() {}\n\npublic final int func(int value) {\n\n    return 1 * value;\n}\n\n```\n**Kotlin**\n```kotlin\nfun func() {}\n\nfun func(value: Int): Int {\n\n    return 1 * value\n}\n\n// 或者\n\nfun func(value: Int): Int = 1 * value\n```\n---\n### 类\n**Java**\n```java\npublic final class Person {\n\n    private String name = null;\n\n    private int age = 25;\n\n    private Person() {\n    }\n\n    public Person(String name, int age) {\n\n        this.name = name;\n        this.age = age;\n    }\n}\n\n```\n**Kotlin**\n```kotlin\nclass Person private constructor() {\n\n    private var name: String? = null\n\n    private var age: Int = 25\n    \n    constructor (name: String, age: Int): this() {\n\n        this.name = name\n        this.age = age\n    }\n}\n```\n---\n### 静态方法（ 伴生对象 ）\n**Java**\n```java\npublic final class Manager {\n\n    private Manager() {}\n\n    public static Manager getInstance () {\n\n        return new Manager();\n    }\n}\n\n```\n**Kotlin**\n```kotlin\nclass Manager private constructor() {\n\n    companion object {\n\n        fun getInstance(): Manager = Manager()\n    }\n}\n\n```\n---\n### 实体类\n**Java**\n```java\npublic class Person {\n\n    public String name;\n\n    public age;\n\n    public Person(String name, int age) {\n\n        this.name = name;\n        this.age = age;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public int getAge() {\n        return age;\n    }\n\n    public void setAge(int age) {\n        this.age = age;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) return true;\n        if (o == null || getClass() != o.getClass()) return false;\n\n        Person person = (Person) o;\n\n        if (age != person.age) return false;\n        return name != null ? name.equals(person.name) : person.name == null;\n\n    }\n\n    @Override\n    public int hashCode() {\n        int result = name != null ? name.hashCode() : 0;\n        result = 31 * result + age;\n        return result;\n    }\n\n    @Override\n    public String toString() {\n        return \"Person{\" +\n                \"name='\" + name + '\\'' +\n                \", age=\" + age +\n                '}';\n    }\n}\n\n```\n**Kotlin**\n```kotlin\ndata class Person(var name: String, var age: Int)\n\n```\n\n---\n### 解构\n**Java**\n```java\nPerson p = new Person(\"haohao\", 25);\n\nString name = p.getName();\n\nString age = p.getAge();\n```\n**Kotlin**\n```kotlin\nvar p = Person(\"name\", 25)\n\nvar (name, age) = p\n```\n---\n### 接口\n**Java**\n\n```java\ninterface Readable {\n\n    String getContent();\n}\n```\n\n```java\npublic final class Book implements Readable {\n\n    @override\n    public String getContent() {\n\n        return \"Hello\";\n    }\n} \n```\n**Kotlin**\n```kotlin\n\n// Kotlin 接口中可以设置抽象和非抽象方法,可以有属性但必须声明为抽象或提供访问器实现。\ninterface Readable {\n\n   fun getContent(): String\n\n   fun getVersion(): Int = 0 \n   \n}\n```\n\n```kotlin\nclass Book(): Readable {\n\n   override fun getContent(): String = \"Hello\"\n   \n   override fun getVersion(): Int {\n\n       return super.getVersion()\n   }\n}\n```\n---\n### 继承\n**Java**\n\n```java\npublic class Person {\n \n    private String name = null;\n\n    public Person(String name) {\n        this.name = name;\n       \n    }\n\n    public void sayHello() {\n        System.out.println(\"Hello\");\n    }\n\n    public final void sayGood() {\n        System.out.println(\"Good\");\n    }\n\n}\n```\n\n```java\npublic final class Student extends Person {\n\n    private String school = null;\n\n    public Student(String name, String school) {\n        super(name);\n        this.school = school;\n    }\n\n    @Override\n    public void sayHello() {\n        super.sayHello();\n        System.out.println(\"Hello Student\");\n    }\n}\n```\n**Kotlin**\n```kotlin\nopen class Person(private var name: String? = null) {\n\n    open fun sayHello() = println(\"Hello\")\n\n    fun sayGood() = println(\"Good\")\n\n}\n```\n\n```kotlin\nclass Student(private var school: String? = null, name: String): Person(name) {\n    \n   override fun sayHello() {\n       super.sayHello()\n       println(\"Hello Student\")\n   }\n    \n} \n```\n---\n### 静态与非静态内部类\n**Java**\n\n```java\npublic final class Outer {\n\n    private int bar = 100;\n    \n    public static class Nester {\n         \n        public final String foo() {\n            return \"Hello Kotlin!\";\n        }\n    }\n\n    public final class Inner {\n    \n        public final int foo() {\n            return bar; // 可以访问外部类成员\n        }\n        \n    }\n    \n}\n\n\nSystem.out.println(new Outer.Nester().foo()); \n\n// System.out.println(new Outer().Inner().foo()); 不能在其他类中实例化非静态内部类\n\n```\n\n**Kotlin**\n```kotlin\nclass Outer {\n    private var bar: Int = 100\n\n    // 嵌套类\n    class Nester {\n        // 不能访问外部类成员\n        fun foo() = \"Hello Kotlin!\"\n    }\n\n    // 内部类\n    inner class Inner {\n        // 可以访问外部类成员\n        fun foo() = bar\n    }\n}\n\n\n\nprintln(Outer.Nested().foo())\n\nprintln(Outer().Inner().foo())\n\n```\n---\n### 匿名内部类\n**Java**\n```java\nview.setOnClickListener(new OnClickListener() {\n   \n    @override\n    onClick(View view){\n        // to do something.\n    }\n \n});\n```\n**Kotlin**\n```kotlin\ninterface OnClickListener {\n    fun onClick()\n}\n\nclass View(){\n    var listener: OnClickListener? = null\n\n    fun setOnClickListener(listener: OnClickListener) {\n        this.listener = listener\n    }\n}\n\nview.setOnClickListener(object : OnClickListener{\n    override fun onClick() {\n        TODO(\"not implemented\")\n    }\n})\n\n```\n---\n### 扩展\n**Java**\n```java\n// Java 类不能直接进行扩展\n```\n**Kotlin**\n\n```kotlin\n// 一般扩展\nclass MyClass {\n   fun foo() = println(\"member\")\n}\n\nfun MyClass.bar() = println(\"extension\")\n\nMyClass().bar()\n\n//输出： extension\n\n```\n\n```kotlin\n// 扩展函数与成员函数相同\nclass MyClass {\n\n   fun foo() = println(\"member\")\n}\n\nfun MyClass.foo() = println(\"extension\") // 扩展函数与成员函数相同时, 成员函数优先\n\nfun MyClass.foo(para: Int) = println(\"extension\")\n\nMyClass().foo()\n\nMyClass().foo(0)\n\n//输出： \n//     member\n//     extension\n      \n```\n---\n### Kotlin Call Java\n**Java**\n```java\npublic class Person {\n    private String name = null;\n    private int age = 0;\n\n    public Person(String name, int age) {\n        this.name = name;\n        this.age = age;\n    }\n\n    public Person() {\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public int getAge() {\n        return age;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public void setAge(int age) {\n        this.age = age;\n    }\n    \n    @Override\n    public String toString() {\n        return \"name : \" + name + \", age : \" + age;\n    }\n}\n\n```\n**Kotlin**\n\n```kotlin\nvar p = Person()\np.name = \"haohao\"\np.age = 25\n\nprintln(p.toString())\n\n// name : haohao, age : 25\n\n```\n---\n### Java Call Kotlin\n\n**Kotlin**\n\n```kotlin\n// Example.kt\npackage demo\n\nclass MyClass\n\nfun func() {\n\n}\n\n```\n\n**Java**\n```java\nnew demo.MyClass();\n\ndemo.ExampleKt.func();\n```\n---\n### 泛型\n**Java**\n```java\npublic final class Wrapper\u003cT\u003e {\n    private T item;\n    public Wrapper(T item) {\n        this.item = item;\n    }\n\n    public T getItem() {\n        return item;\n    }\n}\n\nWrapper\u003cString\u003e wrapper = new Wrapper\u003c\u003e(\"Hello Kotlin\");\nSystem.out.println(wrapper.getItem());\n\n```\n**Kotlin**\n```kotlin\nclass Wrapper\u003cT\u003e(val item: T)\n\nvar wrapper = Wrapper(\"Hello Kotlin\")\nprintln(wrapper.item)\n\n```\n---\n### 匿名函数 ( Lambda 表达式 )\n**Java (Java 8)**\n```java\nnew Thread(() -\u003e {\n\n    System.out.println(\"Hello Kotlin\");\n    \n}).start();\n\n// 同下\n\nnew Thread(new Runnable() {\n\n    @Override\n    public void run() {\n    \n        System.out.println(\"Hello Kotlin\");\n\t\n    }\n   \n}).start();\n\n```\n**Kotlin**\n```kotlin\nThread(Runnable {\n\n    println(\"Hello Kotlin\")\n    \n}).start()\n\n// Kotlin Lambda 表达式语法\n\nval sum = {x: Int, y: Int -\u003e x + y }\n\nval sum1: (Int, Int) -\u003e Int = {x, y -\u003e x + y }\n\nval sum2 = fun(x: Int, y: Int): Int {\n    return x + y\n}\n\nprintln(sum(2,8))\n\nprintln(sum1(2,8))\n\nprintln(sum2(2,8))\n\n//输出：\n//    10\n//    10\n//    10\n//    Hello Kotlin\n```\n---\n### Kotlin 高阶函数\n**Java**\n```java\n// Java 不能直接实现高阶函数\n```\n**Kotlin**\n```kotlin\n// 高阶函数，即一个函数可作为高阶函数的参数\nfun superFunc(desc: String?, method: () -\u003e String) {\n    print(desc)\n    println(method())\n}\n\n\nfun argFun() = \"我是高阶函数的参数\"\n\n//使用高阶函数\n\nsuperFunc(\"这是一个高阶函数 \", ::argFun)\n\nsuperFunc(\"这是一个高阶函数 \", { argFun() })\n\nsuperFunc(\"这是一个高阶函数 \") { argFun() }\n\n\n//输出：\n//    这是一个高阶函数 我是高阶函数的参数\n//    这是一个高阶函数 我是高阶函数的参数\n//    这是一个高阶函数 我是高阶函数的参数\n\n```\n---\n### 简单异步\n**Java (Java 8)**\n```java\nnew Thread(() -\u003e {\n\n    data = DataSource.obtain(); //耗时操作\n    \n    runOnUiThread(() -\u003e {\n        \n\tview.load(data); //更新 UI   \n\t\n    });\n    \n}).start();\n\n```\n**Kotlin (Kotlin Anko)**\n```kotlin\nasync {\n\n    data = DataSource.obtain(); //耗时操作\n    \n    uiThread {\n        view.load(data); //更新 UI\n    }\n}\n```\n---\n### 泛型函数\n**Java**\n```java\n// Java 不能单独实现泛型函数\n```\n**Kotlin**\n```kotlin\nfun \u003cT\u003e singletonList(item: T): List\u003cT\u003e {\n    return arrayListOf(item)\n}\n\nval list = singletonList\u003cString\u003e(\"kotlin\")\n```\n---\n### 嵌套函数\n**Java**\n```java\n// Java 不支持嵌套函数\n```\n**Kotlin**\n```kotlin\nfun main(args: Array\u003cString\u003e) {\n\n    fun sayHello() {\n        println(\"Hello Kotlin\")\n    }\n\n    sayHello();\n}\n// 输出：\n//    Hello Kotlin\n```\n---\n### Kotlin 内联具体化\n\n**Kotlin**\n```kotlin\ninline fun \u003creified T ： Activity\u003e Activity.gotoActivity() {\n\n    val intent = Intent(this, T::class.java)\n    this.startActivity(intent)\n}\n\ngotoActivity\u003cNewActivity\u003e()\n\n```\n---\n\n### Kotlin lazy 懒加载\n\n**Kotlin**\n```kotlin\nval lazyValue: String by lazy {\n    println(\"init\")  //第一次使用时才被初始化 \n    \"Hello Kotlin\"\n}\n\nfun main(args: Array\u003cString\u003e) {\n    println(lazyValue)\n    println(lazyValue)\n}\n\n//输出：\n//    init\n//    Hello Kotlin\n//    Hello Kotlin\n```\n---\n\n### Kotlin observable 观察者\n\n**Kotlin**\n```kotlin\nclass Person{\n    public var name: String by Delegates.observable(\"init .. \"){\n        property,oldValue,newValue -\u003e println(\"property : $property, oldValue : $oldValue, newValue : $newValue\")\n    }\n}\n\nfun main(args: Array\u003cString\u003e) {\n    val person = Person()\n\n    println(person.name)\n\n    person.name = \"haohao\"\n    person.name = \"nannan\"\n}\n\n//输出：\n//    init .. \n//    property : var Person.name: kotlin.String, oldValue : init .. , newValue : haohao\n//    property : var Person.name: kotlin.String, oldValue : haohao, newValue : nannan\n```\n---\n### Kotlin 闭包\n\n**Kotlin**\n```kotlin\nval plus = {x: Int, y: Int -\u003e println(\"$x plus $y is ${x+y}\")}\n\nval hello = {println(\"Hello Kotlin\")}\n\nfun main(args: Array\u003cString\u003e) { \n\n    {x: Int, y: Int -\u003e\n        println(\"$x plus $y is ${x+y}\")\n    }(2, 8)         // 自执行的闭包\n\n    plus(2, 8)\n    hello()\n}\n\n//输出：\n//    2 plus 8 is 10\n//    2 plus 8 is 10\n//    Hello Kotlin\n```\n---\n### 持续更新中...\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithubhaohao%2Fjavatokotlin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgithubhaohao%2Fjavatokotlin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithubhaohao%2Fjavatokotlin/lists"}