gpt4 book ai didi

compiler-errors - Kotlin filterNotNull 用于对象属性

转载 作者:行者123 更新时间:2023-12-04 07:08:35 24 4
gpt4 key购买 nike

我有以下(简化的)kotlin 代码:

data class Event(val name: String, val venue: Venue?)

data class Venue(val lat: Double, val lng: Double)

...

return events
.filter { it.venue != null }
.map { doSomething(it.venue.lat, it.venue.lng)

代码无法编译并出现错误 Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Venue?
我明白这意味着什么,但我不明白为什么编译器无法弄清楚 it.venue不能是 null.map称呼。

如果事件可以为空,我可以写 events.filterNotNull().name或者什么,编译器不会提示。有没有办法对可空对象属性而不是可空对象做同样的事情?

谢谢你的时间

最佳答案

不,这是不可能的,无论是在当前版本的 Kotlin 中,还是在当前正在考虑的任何潜在增强功能中。 Kotlin 编译器不够聪明,无法理解 filter 的语义函数并知道在传递给该函数的 lambda 中执行的检查将影响不同 lambda 中的可能类型。

(甚至不可能将“Event.venue 不是 null 的 Event 集合”的想法表达为 Kotlin 类型,更不用说推断 map 的接收者将具有该类型。)

关于compiler-errors - Kotlin filterNotNull 用于对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49134834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com