【发布时间】:2020-07-06 06:34:48
【问题描述】:
这只是我写的一个示例代码。下面是 Comment 对象的数据类。
data class Comment(
val id: Int,
val text: String?
)
我正在对 Comment 对象列表执行过滤操作。
commentList.filter { comment -> comment.text != null }
.map { comment -> comment.text.length }
这会导致在声明Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver 的comment.text 上出现编译器错误。所以我的问题是为什么过滤器方法不对文本对象进行智能转换并将其转换为不可为空的字符串类型?
还有没有更好的方法可以实现智能投射?
附言我知道我总是可以做到这一点,但出于好奇想知道是否有一些默认的 Kotlin 扩展功能可以完成这项工作。
commentList.filter { comment -> comment.text != null }
.map { comment -> comment.text?.let { text ->
text.length
}
}
【问题讨论】: