gpt4 book ai didi

nullpointerexception - java修改kotlin类内容为null

转载 作者:行者123 更新时间:2023-12-04 08:23:01 27 4
gpt4 key购买 nike

Kotlin 在编译时有一个出色的 null 检查,使用分离到“可空?”和“不可为空”的对象。它有一个 KAnnotator 来帮助确定来自 Java 的对象是否可以为空。但是,如果 not-nullable 类的某些部分发生了变化怎么办?

假设我们有一只猫,它的头肯定会喵喵叫。当我们让猫喵喵叫时,它用头喵喵叫:

package org.cat

class CatHead(){
fun mew(){
println("Mew")
}
}

class Cat(){
var head = CatHead()
fun mew(){
head.mew()
}
}

fun main(args:Array<String>){
val cat = Cat()
cat.mew()
}

现在让我们在这张漂亮的图片上添加一个 JAVA 猫疯子 (CatManiac.java),他会在得到猫的头时砍掉它:

import org.cat.*;

public class CatManiac {
public static void cutCatHead(Cat cat){
cat.setHead(null);
}
}

所以如果我们把一只猫传给一个疯子,他肯定会砍掉它的头。没有头的猫怎么叫?

fun main(args:Array<String>){
val cat = Cat()
CatManiac.cutCatHead(cat)
cat.mew()
}

由于 null,我们在 kotlin 中得到一个运行时错误,调用 cat.mew() 时:

Exception in thread "main" java.lang.IllegalArgumentException". 

我相信这是我们在 Kotlin 中使用 Java 库时遇到的一个非常普遍的问题。有什么方法或计划来警告/与之抗争吗?

附言像 KAnnotator 这样的东西在你的代码中寻找这样的东西?

最佳答案

Java 代码检查器最终将扩展到 Kotlin 代码。

例如,IntelliJ 中的那个会立即警告您这个问题。它是开源社区版的一部分,因此您可以亲自试用。

同时请注意,与 Java 相比,Kotlin 具有很大的优势:它恰好在引入错误的地方失败。很难通过多次 Kotlin 调用传递空值然后才失败。在 Kotlin 中,您通常会在首次引入非法 null 的地方遇到运行时错误。

关于nullpointerexception - java修改kotlin类内容为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21940117/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com