LocalDateTime扩展功能和智能铸造

我尝试失败(或部分成功)实现LocalDateTime扩展功能

这是我的尝试:

 fun LocalDateTime.isNotBefore(other: ChronoLocalDateTime<*>) = !isBefore(other) 

问题是,IntelliJ抱怨说,它不能smartcast我的curTime变量(这是一个valLocalDateTime?

isNotBefore(curTime)会有一个红色的波浪线,并抱怨说它不能smartcast它。 所以我必须使用!!

不要担心,如果你不能复制它,我有很多的代码 – 这些是重要的部分。

区别在于像isBefore()这样的常规LocalDateTime方法在这个地方不需要smartcast。

所以这意味着我没有在我的扩展功能中正确实现一些东西。

有谁知道我怎么可以修复扩展功能,所以我不需要使用!!

如果仔细查看isBefore签名,它会期待ChronoLocalDateTime<*>! 类型。 这是平台类型的 kotlin表示法。 感叹号意味着它要么ChronoLocalDateTime<*>ChronoLocalDateTime<*>? 而你的isNotBefore方法期望不可空类型。

如果您将扩展函数更改为接受空值,则它将以相同的方式工作。

 fun LocalDateTime.isNotBefore(other: ChronoLocalDateTime<*>?) = !isBefore(other)