gpt4 book ai didi

java - Kotlin 不识别 Java 保留关键字

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:34 31 4
gpt4 key购买 nike

我在 Kotlin 中使用 Java 的保留关键字时遇到问题。由于并非所有保留关键字都在 Kotlin 中可用,因此 Kotlin 编译器无法(不?)检测仅在 Java 中可用的保留关键字。

例如,以default为例。它是一个 Java 保留关键字。这意味着您不能执行以下操作。

public class UserJava {
public String default;
}

但是,它在 Kotlin 中不是保留关键字,因此您可以按如下方式使用它

class UserKotlin {
var default: String? = null
}

对于不懂Java的人来说,很难知道它们是保留关键字。由于 Kotlin 编译器不会给你一个错误,或者任何类型的警告你正在使用保留关键字,它可能会在以后导致一些你不会想到的问题。

它可能遇到的一个问题是在 AnnotationProcessing 期间,这些库是您使用 kaptannotationProcessor 包含在 gradle 中的库。例如,当您尝试获取 UserKotlin 类的字段时,Kotlin 使用 Java 编译器,您会得到一个空列表,因为 Java 编译器不“理解”字段 default 并忽略它(跳过它?)。

现实生活中的例子是,如果您使用 Room 库并拥有如下所示的实体

@Entity
class User{
@PrimaryKey
var id: Int = 0
var default: String? = null
}

房间注释处理器将生成 SQLite 创建查询

CREATE TABLE IF NOT EXISTS `User` (`id` INTEGER NOT NULL, PRIMARY KEY(`id`))

因此,它基本上跳过了 default 字段。

当我尝试使用 Java 保留关键字时,Kotlin 是否会发出警告?还是 Kotlin 中的错误尚未修复?或者有没有提到这个问题的文档。

如果我了解 Java,那么我可能不愿意使用这些关键字,因为我知道这些关键字在 Java 中是保留的。但是,如果我不懂 Java 并且无法弄清楚问题出在哪里怎么办?

最佳答案

老实说,我怀疑这是 JVM 中的问题,但与注释库有关。 Kotlin 不公开 default 变量;公开/暴露的是 getter 和 setter。也就是说,也许注解库试图直接访问私有(private)字段,但最终没有找到它,因为它是一个保留关键字,而 kotlin 编译器可能给了它一个不同的名称。该库在运行时根本不发出任何警告吗?

也就是说,kotlin 正计划在 javascript/native 上传播,并且随着 jvm 成为其帝国的一部分,我认为他们没有任何计划添加您建议的警告。我想图书馆将不得不适应这种情况,否则随着时间的推移会失去专家。

关于java - Kotlin 不识别 Java 保留关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54125163/

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