回答:
これは危険なNULL可能タイプ(あるT?null非許容型への変換)( T)、
!!スローされますNullPointerException値がある場合null。
sale.latestが含むことができることを意味しますnull; 割り当てはsale.latestnullでない場合にのみ成功し、それ以外の場合は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!!