【发布时间】:2017-08-15 05:53:13
【问题描述】:
我有一个变量datePurchased 的项目,它可以为空。根据购买日期,我生成一个标签。当我检查 datePurchased 是否为空时,在 else 分支中我仍然必须检查是否为空。它说智能转换是不可能的,因为它是一个可变属性。
这是我迄今为止尝试过的:
if (datePurchased == null) {
""
} else {
if (datePurchased.isToday()) {//error here
}
}
when {
datePurchased == null -> {
}
datePurchased.isToday() -> {//smart cast bla bla mutable bla bla
datePurchased?.isToday() -> {//expected Boolean, got Boolean?
datePurchased?.isToday()?:false -> {//all good, but does not look nice, since datePurchased can't be null here
}
else -> {
}
}
【问题讨论】:
-
@miensol 所以,你建议我的 else 分支应该“包裹”在
?.let? -
是的。你可以这样做:
datePurchased?.let { if(it.isToday()) // Do something } ?: "" -
@marstran 谢谢。我没有意识到
?.let支持?:
标签: kotlin nullable mutable kotlin-null-safety