在lambda kotlin变通方法中的智能转换变量

我今天已经过了一个lambda,它有一个未知类型的变量,并且在when..is条件中,变量不能智能地转换成is条件中的类型…这使得它是不可能的,因为变量是一个公共的API,有没有解决这个?

在这里输入图像描述

你可以创建一个更方便的onBind扩展函数,它具有传递给lambda的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() } } 

我找到了一个简单的解决方法,它定义一个val等于所需的变量,并使用它,而不是像这样…

在这里输入图像描述

另一种做法是自己制作剧本:

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