- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个基于 Kotlin 的应用程序,最近我们添加了第三方代码质量工具(Codacy 中的 Detekt)。然而,我们开始面临 UnsafeCallOnNullableType 错误。
我们发现可行的方法是在所有可能为空的参数上添加 requireNotNull 检查。目前,我们正在使用确定运算符 (!!)
我们是否有任何特定的理由或惯例来选择一个而不是另一个。据我所知,两者都会抛出异常并阻塞执行流程,除了一个会抛出 IllegalArgumentException 而另一个会抛出 NullPointerException。
最佳答案
requireNotNull
,假设您指的是 Objects#requireNonNull
, 是一个 Java 方法,相当于 !!
,但有一个不同的异常(exception)。
您没有添加任何代码,因此帮助您调试有点困难。您提到了第三方代码质量工具,但没有提到哪个。无意中翻到this GH issue与您遇到的错误相匹配。这也是我能找到的唯一可以在任何时候使用那个确切错误的东西。我可能漏掉了一些,但它涵盖了 Google HitTest 门的热门歌曲,所以我要离开了。
如果您使用的是 Detekt,这是一个已报告的错误。使用 !!
IntelliJ 甚至建议。
但是,您可以采用另一种方式。
是的,使用 Objects#requireNonNull
是一种选择。不过还有第二个,那就是使用空安全运算符,正如 m0skit0 提到的那样。
这样做的原因是因为如果调用的任何内容为空,则最终结果为空。 IE。这个:
instance.nonNullType.nullable?.nullableChild?.someOtherNullableChild
如果任何可为空的为空,则最终结果为空,并且不会调用其他任何一个。
whatever.calls.you?.make?.to?.the?.database ?: throw NullPointerException("Something is null");
它还保持变量非空,这意味着您以后不需要空安全调用。 elvis 运算符检查是否有任何内容为空,然后抛出异常。或者,您可以只使用
Objects#requireNotNull
:
Objects.requireNonNull(whatever.calls.you.make.to.the.database)
如果你真的需要验证每一步,你只需要在任何地方保持空检查
!!
和
requireNotNull
除了
requireNotNull
之外,它们的工作方式实际上是相同的。是一个方法调用和
!!
编译为 if 语句:
if(whatever == null) {
Intrinsics.throwNpe();
}
原因
!!
触发器
UnsafeCallOnNullableType
是因为 Detekt 中的(可能的)错误。但是,这两个选项都是同一件事的语法糖:如果变量为空,则抛出 NPE。
关于kotlin - requireNotNull 与确定运算符 !!在 Kotlin ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52718086/
我们有一个基于 Kotlin 的应用程序,最近我们添加了第三方代码质量工具(Codacy 中的 Detekt)。然而,我们开始面临 UnsafeCallOnNullableType 错误。 我们发现可
我是一名优秀的程序员,十分优秀!