3 回答
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 实现,以及如何更改它们的访问级别,可以在我上面链接的页面上找到。
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()默认设置器中的重写设置器(通过调用)。
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方法
添加回答
举报
