我在 Kotlin 中使用 Java 的保留关键字时遇到问题。由于并非所有保留关键字在 Kotlin 中都可用,因此 Kotlin 编译器无法(不是吗?)检测仅在 Java 中存在的保留关键字。
例如,以 为例default
。它是 Java 保留关键字。这意味着您不能执行以下操作。
public class UserJava {
public String default;
}
但是,它不是 Kotlin 中的保留关键字,因此您可以按如下方式使用它
class UserKotlin {
var default: String? = null
}
对于不懂 Java 的人来说,很难知道它们是保留关键字。由于 Kotlin 编译器不会给您错误或任何类型的警告您正在使用保留关键字,因此它可能会在以后导致一些您不会预料到的问题。
它可能遇到的问题之一是在AnnotationProcessingkapt
期间,这是您使用或包含在 gradle 中的库annotationProcessor
。例如,当您尝试获取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 并且无法弄清楚问题所在怎么办?