Kotlinのインターフェースのフィードバック
3100 ワード
javaのインターフェイスのフィードバックはみんなが使うのがかなり上手だと信じています。でもKotlinに転戦したら、インターフェースのフィードバックはどう書きますか?本論文では、単一パラメータのフィードバック、マルチパラメータのフィードバックの書き方、直接コードを学びます。
私たちはこの言葉を一言で理解します。
ここで
activityに
/**
* :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のコールバックは関数思考モードを使っています。徐々に彼に慣れてきて、コードがより簡潔で優雅になります。