android - 在 Kotlin 中避免竞态条件,Smartcast 是不可能的运行时异常
问题描述
该行:
viewAdapter.setTitleData(bezinningModels)
在下面的代码片段中给了我运行时警告:
智能转换为“BezinningAdapter”是不可能的,因为“viewAdapter”是一个可变属性,此时可能已更改
我浏览了很多带有类似运行时警告的帖子,我明白为什么会发生这种情况。基本上 Kotlin 想要避免竞争条件,以便可变对象的值不能改变,但我仍然没有得到我应该做的事情来避免这个错误,以便我可以将改造调用调用到RecyclerView Array
我试图从更改var
为val
的价值RecyclerView
但没有工作
这是导致问题的代码段:
@RequiresApi(Build.VERSION_CODES.HONEYCOMB)
class MainFragment : android.app.Fragment() {
private lateinit var viewManager: RecyclerView.LayoutManager
private lateinit var recyclerView: RecyclerView
private lateinit var viewAdapter: RecyclerView.Adapter<*>
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.bezinning_fragment, container, false)
viewManager=LinearLayoutManager(activity)
viewAdapter=BezinningAdapter()
recyclerView = view.findViewById(R.id.recycler_view) as RecyclerView
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager=viewManager
recyclerView.adapter=viewAdapter
val subscribe = bezinningListViewModel!!.showBezinningLijst("132")
?.subscribeOn(schedulerProvider!!.io())
?.observeOn(schedulerProvider!!.ui())
?.subscribe(object : FlowableSubscriber<List<BezinningModel>> {
override fun onError(t: Throwable?) {
Log.d("IVO", "onError: ")
}
override fun onComplete() {
Log.d("IVO", "onComplete: ")
}
override fun onSubscribe(s: Subscription) {
s.request(Long.MAX_VALUE);
}
override fun onNext(bezinningModels: List<BezinningModel>?)
{
val JSONResponseBody = bezinningModels!!
[0].attribute.body
viewAdapter.setTitleData(bezinningModels)
val bodyBezinningParsedHtml =
Html.fromHtml(JSONResponseBody)
}
})
return view
}
}
解决方案
如果您知道这viewAdapter
将是 a BezinningAdapter
,那么将其声明为:
private lateinit var viewAdapter: BezinningAdapter<*>
推荐阅读
- python - 比较后将当前行值分配给熊猫数据框的前一行
- html - 正文一侧的 Bootstrap4 注释
- javascript - 使聊天小部件 Tawk.io 在一个组件上消失
- javascript - 导航切换不会出现
- python - 如何在python中进行if语句浮点比较?
- python - 如何允许 python 脚本更改程序文件?
- c - 如何使用没有内置函数的 C 比较具有特定格式的车辆的两个车牌
- pandas - 如何用pandas.melt将同一张表中的四列融合在一列中
- reactjs - Express-React-JWT:如何使用静态文件请求发送 Bearer 令牌
- slack-api - 作为机器人搜索 Slack 消息