Java Kotlin转换期间删除的setter/getter
在将基于Java的模型类转换为Kotlin之后,我注意到我的setter和getter方法被删除了。曾经是什么,Java Kotlin转换期间删除的setter/getter,java,android,kotlin,Java,Android,Kotlin,在将基于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,然后
private String apiKey;
public void setApiKey(String key) {
this.key = key;
}
public String getApiKey() {
return key;
}
变成
lateinit var apiKey: String
到底发生了什么事?它是否删除了我的setter和getter,然后将变量的访问修饰符从private更改为public?如果是这样的话,为什么这样好?setter和getter是Java抽象的一部分。科特林不在乎这个
我仍在学习Kotlin,我依赖于内置转换作为最佳实践的初学者指南。这只是一种在Kotlin中不执行setter/getter的情况吗?您的字段+getter/setter已转换为。因为field+getter/setter非常常见,所以Kotlin对它有顶级支持。看起来您可能直接访问裸字段,但事实并非如此。Kotlin对您隐藏了getter和setter的默认实现。在大多数情况下,我们只想在没有任何其他逻辑的情况下得到一个get或set,所以我们不需要看到它。任何时候在Kotlin中访问
apiKey
,都是通过getter或setter
至于为什么它是公共的,默认情况下Kotlin中的属性是公共的。如何提供自己的get/set实现,以及如何更改它们的访问级别,可以在我上面链接的页面上找到
它是否删除了我的setter和getter,然后将变量的访问修饰符从private更改为public
对
若然,原因为何
它为您拥有的代码生成了惯用的Kotlin
这个怎么样
惯用Kotlin是Kotlin的代码转换器的合理默认选择
setter和getter是Java抽象的一部分。科特林不在乎这个
当然有。但是,您现有的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
的使用者不需要做任何不同的事情来使用覆盖的setter(使用toUpperCase()
调用)和默认setter。我建议您阅读一篇关于Kotlin
的好文档,例如,但我将给您举一个小例子
他们删除了setter
和getter
是正常的,他们仍然在那里。。。问题是,如果您想覆盖这些设置和获取,您应该执行以下操作:
private var apiKey: String
get() = "My apiKey is $apiKey"
set(value) {
//Do whatever you want with apiKey
}
因此,如果您不想覆盖这些方法,只需使用以下方法访问:
如果您使用apiKey=…
则使用的是集合
如果您使用var newVar=apiKey
您使用的是get方法Kotlin具有隐含的getter和setters哇,非常好的响应。现在已经非常清楚了。我懂了。我想我的IDE一直都知道它在做什么:-)