什么是 Kotlin double-bang (!!) 运算符?
What is the Kotlin double-bang (!!) operator?
我正在使用 Android Studio 将 Java 转换为 Kotlin。我在实例变量之后得到了双重打击。什么是双重爆炸,更重要的是,它在哪里记录?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
这是不安全的可空类型 (T?
) 到不可空类型 (T
) 的转换,
如果值为 null
.
,!!
将抛出 NullPointerException
记录了 here 以及 Kotlin 的空安全方法。
这是一个让事情更清楚的例子。
假设你有这个功能
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
类型添加问号使其可为空来防止这种情况发生。
所以我们有
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
这会产生
的结果
null
现在如果我们想让函数在email的值为null时抛出异常,我们可以在email的末尾添加两个感叹号。像这样
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
这将抛出一个 KotlinNullPointerException
Kotlin 的 double-bang 运算符 是 NullPointerException
(NPE) 粉丝的绝佳示例。
The not-null assertion operator !!
converts any value to a non-null type and throws an exception if the value is null.
val nonNull = str!!.length
如果你写str!!
,它将return一个非空值str
(str
在这里是 String?
)或者如果 str
为空则抛出 NPE。该运算符应该在开发人员保证的情况下使用——该值永远不会为 null。如果你想要一个 NPE,你必须明确地要求它。
!!断言它不为空。可空值后的两个感叹号将其转换为 non-nullable 类型。同时,在转换之前,并没有以任何方式检查该值是否真的不包含null。因此,如果在程序执行过程中发现 !!运算符尝试转换仍然为 null,那么只有一种出路 - 抛出 NullPointerException。
我正在使用 Android Studio 将 Java 转换为 Kotlin。我在实例变量之后得到了双重打击。什么是双重爆炸,更重要的是,它在哪里记录?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
这是不安全的可空类型 (T?
) 到不可空类型 (T
) 的转换,
如果值为 null
.
!!
将抛出 NullPointerException
记录了 here 以及 Kotlin 的空安全方法。
这是一个让事情更清楚的例子。 假设你有这个功能
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
类型添加问号使其可为空来防止这种情况发生。
所以我们有
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
这会产生
的结果null
现在如果我们想让函数在email的值为null时抛出异常,我们可以在email的末尾添加两个感叹号。像这样
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
这将抛出一个 KotlinNullPointerException
Kotlin 的 double-bang 运算符 是 NullPointerException
(NPE) 粉丝的绝佳示例。
The not-null assertion operator
!!
converts any value to a non-null type and throws an exception if the value is null.
val nonNull = str!!.length
如果你写str!!
,它将return一个非空值str
(str
在这里是 String?
)或者如果 str
为空则抛出 NPE。该运算符应该在开发人员保证的情况下使用——该值永远不会为 null。如果你想要一个 NPE,你必须明确地要求它。
!!断言它不为空。可空值后的两个感叹号将其转换为 non-nullable 类型。同时,在转换之前,并没有以任何方式检查该值是否真的不包含null。因此,如果在程序执行过程中发现 !!运算符尝试转换仍然为 null,那么只有一种出路 - 抛出 NullPointerException。