lambda kotlin变通方法中的智能铸造变量

时间:2016-11-08 22:46:26

标签: android variables lambda casting kotlin

我今天已经过了一个lambda,它有一个未知类型的变量,并且在when..is条件下,变量不能智能地转换为is条件中的类型...它给出了这是不可能的,因为变量是公共Api,有没有解决方法呢?

enter image description here

3 个答案:

答案 0 :(得分:2)

您可以创建一个更方便的onBind扩展功能,其中itemview等传递给lambda而不是接收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()
    }
}

答案 1 :(得分:1)

我找到了一个简单的解决方法,它定义了一个等于所需变量的val,并使用它来代替这样......

enter image description here

答案 2 :(得分:0)

另一种方法是自己制作演员:

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