首先給大家分享一個交流平臺http://kotlin.cn/
由于我的Android項目在轉換Kotlin編碼后我定義的反射機制崩潰了,一直報錯不斷,所以我覺得看看它的官方文檔,由于英文文檔我看著吃力,我找到了一個編譯的中文文檔,看著還不錯比較全面就是錯別字很多,還有部分源碼有問題,我發現的會在下面講解時矯正過來,這是網址https://huanglizhuo.gitbooks.io/kotlin-in-chinese/content/Other/Reflection.html。
由于我遇到的是反射機制的問題,所以我重點看了文檔中對kotlin反射部分的內容,得到了如下心得與大家分享:
首先我要說一說的就是函數引用,它的函數的聲明簡潔清晰,這是kotlin讓我非常喜歡。
例:函數聲明 fun isOdd(x:Int)=x % 2 !=0,看到這里會不會又看不懂的開始吐槽了,別急我給大家解釋一下,fun isOdd(x:Int)是聲明的函數,其中isOdd是函數名也可以說是方法名而fun 可以理解為修飾符,(x:Int)則是參數參數名為x類型為int,后面的這部分=x % 2 !=0,第一個=后的內容為函數體就是x % 2 !=0,這樣一看大家應該都看懂了吧?是不是感覺很簡潔,這個函數體是判斷輸入值是否為偶數。
前面的函數引用不是我要說的重點,我要說的是函數組合
首先我們在寫一個函數 fun length(s: String) = s.length,這個函數我們是輸入字符串返回一個字符串的長度值,下面我們將這個函數與上面講到的函數組合起來使用,這時我們需要設置一個組合器,代碼如下:
fun <A,B,C>compose(f: (B) ->C, g: (A) ->B): (A) ->C { return { x->f( g(x) ) } }
到這里是不是又感覺有點亂了,我來幫你理理思路,首先我們還是分為2部分我們將函數體先剔出去fun <A,B,C>compose(f: (B) ->C, g: (A) ->B): (A) ->C { } 然后我們來看下參數(f: (B) ->C, g: (A) ->B)這兩個參數分別為f: (B) ->C和g: (A) ->B,這兩個參數大家可以理解為一元一次函數g公式未知數A得到值為B,f公式未知數為B得到值為C,這時我們再看函數體{return { x->f( g(x) ) } }我們輸入x先經過g(x)公式得到值,再將這個值作為f(x)公式輸入的x進行運算得到最終輸出值也就是C。
這會都清楚了吧,那這個函數組合又如何來用呢?
val oddLength = compose(::isOffet, ::length) ?//val是kotlin的常量修飾符,::表示引用方法值
val strings =listOf("a","ab","abc") ?//得到一個字符串集合
Log.i("log","strings--"+strings.filter(oddLength))? //輸出結果 [a, abc]