回答:
これは危険なNULL可能タイプ(あるT?
null非許容型への変換)( T
)、
!!
スローされますNullPointerException
値がある場合null
。
sale.latest
が含むことができることを意味しますnull
; 割り当てはsale.latest
nullでない場合にのみ成功し、それ以外の場合はNPEをスローします。これにより、nullセーフが提供されますval price
。その型はnull以外になります。kotlinlang.org/docs/reference/null-safety.htmlを
!!
すると、フェイルファストし、NPEの根本原因を特定できます。Javaに同様の機能(つまり、醜いif
ステートメントやassert
イオンがない)があればいいのにと思います。
これは、物事をより明確にするための例です。この機能があるとしましょう
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
これにより、次のコンパイルエラーが発生します。
Null can not be a value of a non-null type String
これで、String
型に疑問符を追加してnull可能にすることで、これを防ぐことができます。
だから私たちは
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
これにより、
null
emailの値がnullのときに関数が例外をスローするようにしたい場合は、emailの最後に2つの感嘆符を追加できます。このような
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
これはスローされます KotlinNullPointerException
ダブルバン演算子は、ファンNullPointerException
(または略してNPE)のファンにとって優れたオプションです。
ないヌルアサーションオペレータが
!!
どんな値を変換null以外のタイプと値がnullの場合、例外がスロー。
val nonNull = a!!.length
したがって、を書くa!!
と、これはa
(String
ここでは例として)の非ヌル値を返すか、a
がヌルの場合はNPEをスローします。
NPEが必要な場合はそれを使用できますが、明示的に要求する必要があります。この演算子は、開発者が保証している場合に使用する必要があります。値がnullになることはありません。
!!
がステートメントの最後にある場合、それはどういう意味ですか?KotlinへIJの自動変換は私のためにそれをやったval price = sale.latest!!