Kotlinのインターフェースのフィードバック

3100 ワード

javaのインターフェイスのフィードバックはみんなが使うのがかなり上手だと信じています。でもKotlinに転戦したら、インターフェースのフィードバックはどう書きますか?本論文では、単一パラメータのフィードバック、マルチパラメータのフィードバックの書き方、直接コードを学びます。
/**
 *   :Test
 *   :2018/8/21.
 *   :
 */
class Test:AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var mathUtlils = MathUtils()
        println("    ")
        mathUtlils.getResult()
        mathUtlils.setListen {
            println("      $it")
        }
    }
}
/**
 *   :TestDemo
 *   :2018/8/21.
 *   :
 */
class MathUtils {

    private lateinit var listen: ((Int) -> Unit)

    fun setListen(listen: ((Int) -> Unit)) {
        this.listen = listen
    }

    fun getResult() {
        println("             ")
        var sum = 200
        listen.invoke(sum)
    }
}
上のロジックはTestはMathUtilsからの計算結果を必要としますが、Testは計算の過程に関心がなく、この計算の結果だけが必要です。私たちは自然にインターフェースのフィードバックを思い出しました。
私たちはこの言葉を一言で理解します。
private lateinit var listen: ((Int) -> Unit)
ここのlateinitは、後でlisten変数を初期化する属性である((Int) -> Unit)です。listen 個の入参であり、単一パラメータIntタイプであり、戻り値がないという意味です。
ここでfun getResult() {
println(" ")
var sum = 200
listen.invoke(sum)
}
を見ると、listen.invoke(sum)は計算結果sumをlisten関数に入力することである。
activityに((Int) -> Unitタイプの関数を設定すると、計算結果を傍受することができます。
mathUtlils.setListen {
            println("      $it")
        }
では、パラメータの多さはどう書きますか?
 private lateinit var saveListen: ((Boolean, File) -> Unit)

        fun setListen(saveListen: ((Boolean, File) -> Unit)) {
            this.saveListen = saveListen
        }
 ImageSaver.setListen { boolean, file ->
 }
見ましたよね。括弧の中に欲しいパラメータの種類を追加すればいいです。習うより慣れろ。叩いてみれば、どういうことか分かります。Kotlinのコールバックは関数思考モードを使っています。徐々に彼に慣れてきて、コードがより簡潔で優雅になります。