2016-11-08 6 views
1

今日はラムダを過ぎ、不明な型の変数を持ち、when..is条件の中では変数はis条件の型にスマートキャストできません。変数がPublic APIであるため不可能であることを示していますが、これには回避策がありますか?私が欲しかった変数を等しくし、代わりにそう...ラムダコトリン回避策のスマートキャスト変数

enter image description here

+1

それがコピーできるように、テキスト形式で切り取らあなたのコードを追加してください - ペーストされた。私はあなたに質問に答えるコードを書き直さなければならなかった。それは楽しいものではなかった。 – voddan

答えて

1

.onBind { 
    when(item) { 
     is Product -> view.number_sold_text = (item as Product).price.toString() 
    } 
} 
0

ようにそれを行うための別の方法がであることに使用するのvalを定義している簡単な回避策を発見した

enter image description here

+0

子供のオブジェクトが複数ある場合は気になります。 – Seaskyways

2

さらに便利なonBind拡張子を作成することができますなど、itemviewを持って慰めは、受信するのではなく、ラムダに渡さItemViewTypePosition

inline fun LastAdapter.Builder.onBind(crossinline f: (item: Any, view: View, type: Int, position: Int) -> Unit): LastAdapter.Builder { 
    return onBindListener(object : OnBindListener { 
     override fun onBind(item: Any, view: View, type: Int, position: Int) { 
      f(item, view, type, position) 
     } 
    }) 
} 

使用法:

builder.onBind { item, view, type, position -> 
    when (item) { 
     is Product -> view.number_sold.text = item.price.toString() 
    } 
}