2017-10-10 5 views
2

私はKotlinで委任を使用しています。私は、BaseDataDelegationoldDataを渡されたので、それゆえ私は、データ(Modelクラス)kotlin、実際の変数の値は、パラメータを使用して渡された別のクラスでどのように変更できますか?

class BaseDataDelegation<T>(var oldData: T): WebDataListener<T> { 
    override fun onSuccess(data: T) { 
     oldData = data //oldData's original variable value which is inside main activity should also be updated 

       /.../ 
    } 

    override fun onFailed() { 
     /.../ 
    } 


} 

は、MainActivityでは、私は

dataManager.getResponse(BaseDataDelegation(oldData))//in DataManager.getResponse(listener:WebDataListener<T>) 

をベース一般的なネットワークの結果を処理するクラスが、唯一の違いを呼んでいるされていますoldDataの値がBaseDataDelegationクラスで変更された場合、それはMainActivtyの変数に反映されるべきです。
Kotlinではどうすればいいですか?

答えて

4

property referenceを使用すると、これを実現できます。

class BaseDelegation<T>(val property: KMutableProperty0<T>) { 
    override fun onSuccess(data: T) { 
     property.set(data) 
    } 
} 

性質、例えばにbound referenceを使用し、BaseDelegationを構築するために、次に:ここでは例ですthis::oldDataまたはmyActivity::oldData(プロパティ自体は変更可能、つまりvar)。ここで

は簡略化され、実行可能なデモです:(link)

+0

は、それが動作するように、私はそれを実装した後に更新されます見えます。 –

+0

まず最初に感謝していますが、私はそれがどのように働いているのか、私はドキュメンテーションを読んだことがありますが、それほど役に立たないとは分かりません。 –

関連する問題