美文网首页
扩展函数那些事

扩展函数那些事

作者: 无良安生 | 来源:发表于2020-09-24 13:19 被阅读0次

    1 T 的扩展函数

      fun <T> T.testFun(
            bock: (T) -> Type1
        Type2  {
            val value:Type2  = ...
            bock(value)
            return value
        }
    
    1. bock: (T) :是定义方法getView后面大括号
      (1). bock: (T): getView{ it:T }
      (2). bock: T.() :getView{ this:T }
      (3). bock: () :getView{ }
    2. Type1 :是大括号中最后一行作为返回的类型 注意 Util 没有返回
    3. Type1 :是函数 getView的返回值类型
    4. bock(value): 是将getView{ }中对T的设置保存到value中 如果不执行bock 大括号中对T对象的设值将不起作用

    2 比如:

    1. Type1 、Type1

      (1). bock: ()

     fun <T> T.testFun(
                    bock: () -> String
        ): Int {
               return 12
        }
            
        val a:Int = 1L.testFun { 
               val b = 12
               ""^testFun
        }
    

    ...
    (2). bock: (T)

        fun <T> T.testFun(
                    bock: (T) -> String
        ): Int {
               return 12
        }
            
        val a:Int = 1L.testFun { it:Long
               val b = 12
               ""^testFun
        }
    

    ...
    (3). bock: T.()

        fun <T> T.testFun(
                    bock: T.() -> String
        ): Int {
               return 12
        }
            
        val a:Int = 1L.testFun { this:Long
               val b = 12
               ""^testFun
        }
    

    注意 a 的值永远是12

    1. bock() 的作用
    class User {
        var name: String? = null
        var age: Int? = 0
    }
    
    fun <T> T.testFun(
      bock: T.() -> Unit
    ): T {
      return this
    }
    
    val a = User().testFun {
      name = "----->"
      age = 1
    }
     print(Gson().toJson(a))
    

    打印的是{"name":"","age":0}

    改一下

    fun <T> T.testFun(
      bock: T.() -> Unit
    ): T {
      bock()
      return this
    }
    
    val a = User().testFun {
      name = "----->"
      age = 1
    }
     print(Gson().toJson(a))
    

    打印的是{"name":"YYYYY","age":1}

    相关文章

      网友评论

          本文标题:扩展函数那些事

          本文链接:https://www.haomeiwen.com/subject/ydmzyktx.html