由于Kotlin不允许使用隐式null值/变量,是否引入KotlinNullPointerException
来明确表示NPE
引起的!!
?这是NullPointerException
子类的唯一目的吗?
答案 0 :(得分:3)
KotlinNullPointerException
和JavaNullPointerException
之间没有真正的区别。
方法如下:
KotlinNullPointerException
是扩展open
的{{1}}类,现在,这个NullPointerException
是NullPointerException
的{{1}}。
typealias
这是从java.lang.NullPointerException
public open class KotlinNullPointerException : NullPointerException {
constructor()
constructor(message: String?) : super(message)
}
现在,如果看到TypeAlias.Kt
的声明,我们将进入扩展了@SinceKotlin("1.1") public actual typealias NullPointerException = java.lang.NullPointerException
的{{1}}类。
java.lang.NullPointerException
在Kotlin中,要进行一些可为null的类型的声明,必须通过在声明类型的末尾附加Java.lang
来显式地允许它。示例:
RuntimeException
这是一种简单的说法,该变量随时可能为null,因此,如果您尝试从代码的任何部分访问此变量,它将引发错误并迫使您采取措施来防止{{1} },或者使用public
class NullPointerException extends RuntimeException {
private static final long serialVersionUID = 5162710183389028792L;
/**
* Constructs a {@code NullPointerException} with no detail message.
*/
public NullPointerException() {
super();
}
/**
* Constructs a {@code NullPointerException} with the specified
* detail message.
*
* @param s the detail message.
*/
public NullPointerException(String s) {
super(s);
}
}
(如果为null则崩溃)或?
(如果为null则跳过)。
这只是使其看起来更像“ Kotlin”的一种方式。
答案 1 :(得分:1)
从1.3版开始,Kotlin仅在KotlinNullPointerException
操作员检查失败的情况下抛出!!
。这与其他可以抛出NullPointerException
的情况(例如,在类构造期间访问未初始化的成员)有区别。
但是请注意,在Kotlin 1.4中有计划消除这种区别:所有此类失败的检查将仅抛出NullPointerException
,因此它的继承者KotlinNullPointerException
将变得未使用。您可以在1.3.50版本发布的公告博客中了解更多相关信息:https://blog.jetbrains.com/kotlin/2019/08/kotlin-1-3-50-released/