簡體   English   中英

Delegates.observable可用於Kotlin中的匿名函數?

[英]Delegates.observable for anonymous functions in kotlin?

我做的事情很奇怪,但我有短暫的感覺,應該有可能。

Kotlin是否可以進行以下操作? (它可以編譯但不起作用)

 var delegatedProp: (Int) -> Unit by Delegates.observable({ a-> Unit }) { _, _, newVal ->
        //This is never raised
        //Secondly how should I access the given Int ?
        //newVal.a doesn't seem to compile
    }

我的主意是,一旦我調用了proxyedProp(10),可觀察對象就會被調用,並且我將能夠訪問newVal.a。

這樣可以成功編譯,但不會調用observable

當您設置delegatedProp ,將調用第二個lambda,即

x.delegatedProp = { print(it) }

{ print(it) }只是(Int) -> Unit類型的示例。 newVal將是您將屬性設置為的函數,在這種情況下為{ print(it) } 因此它沒有.a

如果要在調用delegatedProp(10)時做一些事情,只需...將這些操作放入函數中:

val delegatedProp: (Int) -> Unit = { a -> /* do whatever you wanted to do with newVal.a */ }

如果您希望delegatedProp是一個var ,但是要繼續執行您的“額外”操作,無論它被分配給什么,最簡單的方法可能是自定義getter:

var delegatedProp: (Int) -> Unit = { a -> Unit }
    get() = { a ->
        /* whatever you want to do with a */
        field(a)
    }

或setter:它不會在每次訪問時都創建一個新的lambda,但是要么重復一些代碼,要么至少需要顯式設置一次,並且不僅要初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM