2017-02-10 16 views
1

私の試みです:のLocalDateTime拡張機能とスマート鋳造

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

問題はIntelliJのは、それがsmartcastことができないと文句を言いますということです私curTime変数(あるvalLocalDateTime?

isNotBefore(curTime)は赤い波線を持っているとtを文句を言うでしょうそれはスマートキャストできません。だから私は使用する必要があります!!

あなたがそれを複製できない場合は心配しないでください、私は多くのコードがあります - これらは重要な部分です。

isBefore()のような通常のLocalDateTimeの方法では、この場所にスマートキャストは必要ありません。

これは私の拡張機能で何かを正しく実装していないことを意味します。

私は!!を使用する必要がないように拡張機能をどのように修正できるか知っていますか?

答えて

3

isBefore署名を詳しく見ると、ChronoLocalDateTime<*>!型が必要です。これはPlatform Typeのkotlin表記です。感嘆符は、isNotBeforeメソッドがnullを許可しない型を予期している間に、ChronoLocalDateTime<*>またはChronoLocalDateTime<*>?のいずれかが必要であることを意味します。

あなたの拡張機能を受け入れ可能に変更すると、同じように動作します。

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

私はその表記法を知らなかったので、私はそれをやろうとしていましたが、私は「!」の検索に問題がありました。 – ycomp

関連する問題