当前位置: 首页 > 知识库问答 >
问题:

Kotlin/Java nullability设置

漆雕升
2023-03-14

给定WebSocketListener中okhttp3.ws.Java接口:

public interface WebSocketListener {
    (...)
    void onFailure(IOException e, Response response);
    (...)
}

Kotlin假设签名如下:

override fun onFailure(e: IOException, response: Response) {
    e.printStackTrace()
    (...)
}

如果我现在以飞行模式启动应用程序,它会尝试连接到web套接字。web套接字无法连接,并返回对“onFailure()”的“null”响应-此时正确。但Kotlin检查响应是否为null,并在打印异常堆栈跟踪之前使我的应用程序崩溃。

那么:如何强制静态编程语言对任何未注释的内容假设为“@Nullable”?

设置应为项目范围,而不是系统范围。

谷歌上的几次搜索没有给出有用的结果。所以我想知道我是否是第一个遇到这个问题的人,Kotlin是否已经准备好使用了。

我真的需要将类转换回Java吗?

共有1个答案

邵阳
2023-03-14

在处理没有可空性信息的java类型时,可以将其作为可空或非空类型使用。这意味着在您的情况下,您可以简单地将响应的类型更改为响应

override fun onFailure(e: IOException, response: Response?) {
    e.printStackTrace()
    (...)
}

静态编程语言

有时Java代码包含关于可空性的信息,使用注释表示。当代码中存在此信息时,Kotlin将使用它。因此,Java中的可空字符串被视为字符串 由Kotlin编写,而NotNull String就是字符串。有趣的问题是,当注释不存在时会发生什么。在这种情况下,Java类型成为Kotlin中的平台类型。

平台类型

平台类型本质上是Kotlin没有可空性信息的类型;您可以将其作为可空类型或非空类型使用。这意味着,就像在Java中一样,您对使用该类型执行的操作负有全部责任。

 类似资料:
  • 我正在尝试编译简单的Kotlin Gradle脚本。我已经用build创建了一个Idea项目。格拉德尔。kts包含以下内容: 它的灵感来自gradle/kotlin-dsl存储库中的复制示例,它既没有从IDE编译,也没有从终端中的gradlew编译。它给了我这些错误: 也许我缺少某种插件来包含?我该怎么做?

  • 我对kotlin和gradle是新手,试图建立我的第一个项目: 然后得到错误消息“src\main\kotlin\main.kt:(4,4):Unresolved reference:println”。 我从http://kotlinlang.org/docs/reference/using-gradle.html复制的build.gradle文件 我希望标准库是自动包含的--或者我需要在这里添加

  • 但是对于Java项目,和都会出现上面的文档,因为在getter中有setter JavaDoc,在setter中有getter JavaDoc。 尝试用Kotlin将两个访问器的文档分开,方法如下: 对于Kotlin和Java代码,IDE中都没有显示JavaDoc。 会很感激任何想法。

  • 努力让Kotlin在Eclipse上运行。 如果我创建‘新科特林项目',一切都工作。 我的graddle构建脚本: 我做错了什么?

  • 我想设置图表的数据颜色,所以我找到了MPAndroidchart,但示例是由Java制作的,而不是Kotlin。 这是我的Kotlin来源。如何更改颜色 此外,我想在条形图中的条形图下方制作标签(如第一张图片),请帮帮我。。T\u T 代码结果:

  • 我想做这样的事情: 但不知道怎么做。有什么解决方案可以修复我下面的代码吗?