LocalDateTime扩展功能和智能投射

时间:2017-02-10 06:38:31

标签: kotlin

我尝试并失败(或部分成功)来实现LocalDateTime

的扩展功能

这是我的尝试:

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

问题是IntelliJ抱怨它无法智能地展示我的curTime变量(valLocalDateTime?

isNotBefore(curTime)会有一条红色的波浪形线,并抱怨它无法智能播放。所以我必须使用!!

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

不同之处在于LocalDateTime这样的常规isBefore()方法不需要此广告中的智能广播。

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

有谁知道如何修复扩展功能,以便我不需要使用!!

1 个答案:

答案 0 :(得分:3)

如果仔细查看isBefore签名,则需要ChronoLocalDateTime<*>!类型。这是Platform Type的kotlin表示法。感叹号表示它需要ChronoLocalDateTime<*>ChronoLocalDateTime<*>?,而您的isNotBefore方法需要非可空类型。

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

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