当前位置: 首页 > 知识库问答 >
问题:

即使在kotlin中检查不为null后仍需要非null断言

段干靖
2023-03-14
result.put(REGISTER_DATE, if (activityData.registerDate == null) -1 else activityData.registerDate.totalDays)
result.put(REGISTER_DATE, if (activityData.registerDate == null) -1 else activityData.registerDate!!.totalDays)

这是Kotlin的bug,还是和Android Studio有关?

共有1个答案

程吕恭
2023-03-14

这是Kotlin的bug,还是和Android Studio有关?

两者都不是。activity.registerdate是对象的一个可为空的可变属性,因此它可以(理论上)随时由另一个线程更改。Kotlin编译器没有足够的知识来证明属性的值在您第二次加载时不会改变,这是一个不争的事实。

避免这种情况的典型方法是只加载一次属性,在局部变量中捕获它。在您所展示的特定情况下,您所需要的只是Elvis运算符

activityData.registerDate?.totalDays ?: -1
 类似资料:
  • 问题内容: 我的上下文对象(构造函数)上有这个: 但是即使有这个设置,这个查询: 返回此SQL: 不难看出我收到了System.OutOfException错误,因为我有成千上万的具有linkedorderid等于NULL的订单。 如果我删除查询,可以正常运行并返回所有有或没有子工作订单的发票… 知道我该如何解决吗? 问题答案: 这行得通吗?如果删除(或(null并且为null))子句时发布的查询

  • 我正在尝试在RecyclerView中添加搜索过滤功能。但应用程序因以下错误而崩溃: 科特林。TypeCastException:null不能转换为非null类型kotlin。收藏。请登录com。卡贝拉什。电影。用户界面。PostListAdapter$searchFilter$1。在android上发布结果(PostListAdapter.kt:87)。小装置。筛选$ResultsHandler

  • 我在行得到异常。怎么会呢?这到底是怎么回事? 这是我的密码。 堆栈跟踪

  • 我是Java初学者,目前正在完成有关DSA的Udemy课程。我正在学习链表,并且正在研究在链表中插入和删除节点的方法。 从我所学到的到目前为止,我知道我们使用条件来检查链接列表是否是空的。 如果条件为true,则LinkedList为空,否则它不为空。 然而,我们不应该检查是否,因为尾巴将始终引用LinkedList中的最后一个节点,即使我们使? 这是我的密码:

  • Sonarqube说这段代码中有两个主要错误,在if条件下的第二条语句中。 第一: 可以抛出“NullPointerException”;“getResponseHeaders()”可以返回null。 第二个: 取消引用“get响应头()”的结果 有没有办法,我可以更改代码来避免这个bug?