web-dev-qa-db-ja.com

Kotlinダブルバング(!!)演算子とは何ですか?

Java St​​udioでAndroidをKotlinに変換しています。インスタンス変数の後にダブルバングを取得します。ダブルバングとは何ですか?さらに重要なことは、これはどこに文書化されていますか?

mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
106
mbr_at_ml

これは、nullを許可しない型(T)への安全でないnullを許可する型(T?)の変換です。値がNullPointerExceptionの場合、nullをスローします。

それは文書化されています ここ Kotlinのヌル安全手段と一緒に。

140
hotkey

以下は、物事を明確にするための例です。この機能があるとします

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をスローします

57
Alf Moh

これは、NullPointerException(または略してNPE)が好きな人に適したオプションです。not-nullアサーション演算子!!は、値をnon-nullタイプに変換します値がnullの場合、例外をスローします。

val lll = a!!.length

したがって、a!!と記述すると、a(ここではStringなど)のnull以外の値を返すか、aの場合はNPEをスローできます=はnullです。

NPEが必要な場合は、それを使用できますが、明示的に要求する必要があります。 この演算子は、開発者が保証している場合に使用する必要があります。値がnullになることはありません

お役に立てれば。

1
ARGeo