LocalDateTime扩展功能和智能铸造
我尝试失败(或部分成功)实现LocalDateTime
扩展功能
这是我的尝试:
fun LocalDateTime.isNotBefore(other: ChronoLocalDateTime<*>) = !isBefore(other)
问题是,IntelliJ抱怨说,它不能smartcast我的curTime
变量(这是一个val
和LocalDateTime?
)
isNotBefore(curTime)
会有一个红色的波浪线,并抱怨说它不能smartcast它。 所以我必须使用!!
不要担心,如果你不能复制它,我有很多的代码 – 这些是重要的部分。
区别在于像isBefore()
这样的常规LocalDateTime
方法在这个地方不需要smartcast。
所以这意味着我没有在我的扩展功能中正确实现一些东西。
有谁知道我怎么可以修复扩展功能,所以我不需要使用!!
?
如果仔细查看isBefore
签名,它会期待ChronoLocalDateTime<*>!
类型。 这是平台类型的 kotlin表示法。 感叹号意味着它要么ChronoLocalDateTime<*>
或ChronoLocalDateTime<*>?
而你的isNotBefore
方法期望不可空类型。
如果您将扩展函数更改为接受空值,则它将以相同的方式工作。
fun LocalDateTime.isNotBefore(other: ChronoLocalDateTime<*>?) = !isBefore(other)