【问题标题】:Kotlin null-check bugKotlin 空值检查错误
【发布时间】:2017-04-10 11:59:07
【问题描述】:

我使用 Java 库。在异常类中有“localizedMessage”字段和“description”字段。我不知道为什么,但是“描述”(即java String)被识别为String!通过 Kotlin,当 "description" 为 null 时,条件 description == null 返回 false。 代码示例:

mvpView?.showToast(it.description?:it.localizedMessage)

或者没有猫王:

if (it.description.isNullOrBlank()) {
     mvpView?.showToast(it.localizedMessage)
} else {
     mvpView?.showToast(it.description)
}

它总是尝试显示“描述”,但调试模式下的“评估表达式”在描述 == null 时返回 true(如预期的那样)。

Kotlin 版本是 1.1.1

【问题讨论】:

  • 你怎么知道它显示的是description而不是localizedMessage?也许他们两个都是空的。
  • String! 是用来表示 String 来自 Java 的符号,因此,Kotlin 实际上并不知道它是否可以为空。
  • 来自调试器的@glee8e

标签: kotlin kotlin-null-safety


【解决方案1】:

原因是在getter中,如果描述为空,它返回另一个字符串而不是描述。

public String getDescription() {
    if (description != null) {
        return description;
    }
    if (UNKNOWN_ERROR.equals(getCode())) {
        return String.format("Received error with code %s", getCode());
    }
    return "Failed with unknown error";
}

【讨论】:

  • 这个异常是从哪里来的?实际的 java.lang.Exception 没有 description 属性。 (您可以接受自己的答案。)
  • 来自第三方库的@EugenPechanec
猜你喜欢
  • 2021-05-15
  • 2020-07-23
  • 1970-01-01
  • 2021-11-04
  • 2021-08-04
  • 1970-01-01
  • 2021-09-01
  • 2022-08-06
  • 1970-01-01
相关资源
最近更新 更多