首页 > 解决方案 > 如何修复所需的 Long 发现 Long?

问题描述

我正在尝试添加两个类型为 Long 的数字

@Entity
data class Monitor(
        @PrimaryKey
        @NonNls
        var parentUsageDuration: Long? = 0L,
        var childUsageDuration: Long ?= 0L
)

有两个号码

var parentTime = homeViewModel.getMonitorAllDataItem()?.parentUsageDuration
var childTime =  homeViewModel.getMonitorAllDataItem()?.childUsageDuration

当我尝试添加这两个数字时

 var totalTime =  parentTime +childTime

我收到错误

required Long found Long ? 

无法添加这两个号码请帮我解决这个问题。

标签: kotlin

解决方案


问题是,parentTime数字childTime不仅仅是数字。它们是数字或空值 - 注意?char 中的字符Long?。不可能对空值执行数学运算,因此我们需要决定在空值的情况下要做什么。最常见的解决方案是:

totalTime如果至少有一个数字为空,则设置为空:

var totalTime = if (parentTime == null || childTime == null) null else parentTime + childTime

用一些默认值替换空值,例如0

var totalTime = (parentTime ?: 0) + (childTime ?: 0)

或者,如果我们确定这些值实际上不能为空:

var totalTime = parentTime!! + childTime!!

如果是这种情况,那么您还应该考虑将parentUsageDuration和的类型更改childUsageDuration为 not-nullable Long,但这实际上取决于您的具体情况。


推荐阅读