为了账号安全,请及时绑定邮箱和手机立即绑定

在 Kotlin 转换期间删除了 Setter/Getter

在 Kotlin 转换期间删除了 Setter/Getter

阿波罗的战车 2023-02-23 14:39:13
将基于 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 的情况吗?
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超5个赞

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

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


查看完整回答
反对 回复 2023-02-23
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

它是否删除了我的 setter 和 getter,然后将我的变量的访问修饰符从私有更改为公共?

是的。

如果是这样,为什么

它为您拥有的代码生成了惯用的 Kotlin。

这有什么好?

Idiomatic Kotlin 是 Kotlin 代码翻译器的合理默认选择。

Setter 和 getter 是 Java 抽象的一部分。Kotlin 不关心这个?

当然可以。但是,您现有的 setter 和 getter 没有做任何事情,因此 Kotlin 转换删除了它们,选择使用已经存在的默认 setter 和 getter。

让我们假设您的代码如下所示:

private String apiKey;public void setApiKey(String key) {   this.key = key.toUpperCase();
}public String getApiKey() {   return key;
}

此处,setter 强制 API 密钥始终为大写。

等效的 Kotlin 将是:

var apiKey: String = "THE-DUDE-ABIDES"
  set(value) { field = value.toUpperCase() }

您的财产的消费者apiKey总是使用 getter 和 setter。只是,在语法上,Kotlin 让调用 getter 和 setter 看起来就像访问一个简单的字段。因此,消费者apiKey不需要做任何不同的事情来使用toUpperCase()默认设置器中的重写设置器(通过调用)。


查看完整回答
反对 回复 2023-02-23
?
绝地无双

TA贡献1946条经验 获得超4个赞

我建议你阅读一个很好的文档,Kotlin例如property-getter-and-setter-kotlin但我会给你一个小例子......


setter他们移除是正常的getter,他们仍然在那里......问题是,如果你想要override这些set,get你应该做类似的事情:


private var apiKey: String

get() = "My apiKey is $apiKey"

set(value) {

    //Do whatever you want with apiKey

}

所以,如果你不想使用override这些方法,你可以简单地使用以下方法访问它:


如果你这样做,apiKey = ...你正在使用一套


如果你使用var newVar = apiKey你正在使用get方法


查看完整回答
反对 回复 2023-02-23
  • 3 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号