java - 字符串之间的区别!和 Kotlin 中的字符串

标签 java android kotlin null

<分区>

我正在使用 kotlin 开发一个 android 应用程序,Android Studio 自动完成菜单显示了这个(我正在详细说明服务器响应)

enter image description here

如您所见,messagestatus 是两个字符串,但第一个标记为 String!,另一个标记为String,但我不明白其中的区别

我尝试检查 (java) 源代码并且 status 被标记为 @NonNull,而 message 没有任何注释,但是如果在这种情况下,在 kotlin 中字符串可以为空,我应该使用 !! 运算符访问它,并且它应该用 ? 标记,而不是用 !,因为它将是 String? 类型。

这是怎么回事?

最佳答案

标有!的类型来自 Java,它们被称为平台类型。这意味着 Kotlin 编译器不知道该值是否可以为 null,因为没有找到它们的可空性注释。

来自official documentation:

Null-checks are relaxed for such types, so that safety guarantees for them are the same as in Java

您应该小心这些类型,因为它们会导致运行时异常:

When we call methods on variables of platform types, Kotlin does not issue nullability errors at compile time, but the call may fail at runtime, because of a null-pointer exception or an assertion that Kotlin generates to prevent nulls from propagating

关于java - 字符串之间的区别!和 Kotlin 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51540740/

相关文章:

java - 如何加密桌面应用程序和基于 REST 的 Web 服务之间的通信?

android - Job Scheduler 间隔被调用的方式太少了

function - Kotlin 顶级函数作用域和阴影

pattern-matching - Kotlin 中元组的模式匹配

java - 这是在 java 中进行深度复制以进行内存基准测试的正确方法吗?

java - 用java编写文本文件

java - 我可以直接使用他们展示中的 PrimeFaces 验证码吗?

java - Android 使用 OpenGL-ES 中的 glBlendFunc 混合获得正确的不透明度/颜色

java - 来自 APK 的源代码

android - 如何从 Delphi Android 应用程序开始视频通话?