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