首页 > 解决方案 > 在 Kotlin 转换期间删除了 Setter/Getter

问题描述

在将基于 Java 的模型类转换为 Kotlin 后,我注意到我的 setter 和 getter 方法被删除了。曾经是什么,

private String apiKey;

public void setApiKey(String key) {
   this.key = key;
}

public String getApiKey() {
   return key;
}

成为

lateinit var apiKey: String

到底发生了什么?它是否删除了我的 setter 和 getter,然后将我的变量的访问修饰符从私有更改为公共?如果是这样,为什么以及如何做到这一点?Setter 和 getter 是 Java 抽象的一部分。Kotlin 不关心这个?

我仍在学习 Kotlin,我依靠内置的转换作为最佳实践的初学者指南。这只是一种你不在 Kotlin 中做 setter/getter 的情况吗?

标签: javaandroidkotlin

解决方案


您的字段 + getter/setter 已转换为Kotlin Properties。因为字段 + getter/setter 非常常见,所以 Kotlin 对其提供了顶级支持。看起来您正在直接访问裸字段,但事实并非如此。Kotlin 对您隐藏了 getter 和 setter 的默认实现。在大多数情况下,我们只是想要一个 get 或 set 没有任何其他逻辑,所以我们不需要看到它。任何时候你apiKey在 Kotlin 中访问,你都在通过 getter 或 setter。

至于为什么是公开的,属性在 Kotlin 中默认是公开的。如何提供您自己的 get/set 实现,以及如何更改它们的访问级别,可以在我上面链接到的页面上找到。


推荐阅读