KotlinNullPointerException和Java的NullPointerException有什么区别

时间:2019-10-09 13:48:48

标签: kotlin nullpointerexception

由于Kotlin不允许使用隐式null值/变量,是否引入KotlinNullPointerException来明确表示NPE引起的!!?这是NullPointerException子类的唯一目的吗?

2 个答案:

答案 0 :(得分:3)

KotlinNullPointerExceptionJavaNullPointerException之间没有真正的区别。

方法如下:

KotlinNullPointerException是扩展open的{​​{1}}类,现在,这个NullPointerExceptionNullPointerException的{​​{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/