在将基于Java的模型类转换为静态编程语言后,我注意到我的setter和getter方法被删除了。曾经是什么,
private String apiKey;
public void setApiKey(String key) {
this.key = key;
}
public String getApiKey() {
return key;
}
成了
lateinit var apiKey: String
到底发生了什么?它是否移除了我的setters和getters,然后将变量的访问修饰符从private改为public?如果是,为什么以及如何是好的?Setters和getters是Java抽象的一部分。科特林不在乎这个?
我仍在学习 Kotlin,并且我依靠内置的转换作为最佳实践的初学者指南。这是否只是一种在 Kotlin 中不做 setter/getters 的情况?
我建议您阅读关于< code>Kotlin的好文档,例如property-getter-and-setter-kot Lin,但我会给你一个小例子...
他们删除了<code>setter</code>和<code>getter</code>是很正常的,他们仍然在那里……问题是如果你想<code>覆盖<code>这些<code>set</code>和<code>get</code>你应该这样做:
private var apiKey: String
get() = "My apiKey is $apiKey"
set(value) {
//Do whatever you want with apiKey
}
因此,如果您不想<code>覆盖</code>这些方法,只需使用以下方法即可访问:
如果您执行<code>apiKey=…</code>操作,则使用的是一个集合
如果使用var newVar=apiKey
,则使用的是get方法
它是否移除了我的setters和getters,然后将变量的访问修饰符从private改为public?
对
如果是,为什么
它为您拥有的代码生成惯用的静态编程语言。
这有什么好处?
惯用的Kotlin是Kotlin代码翻译器的合理默认选择。
setter和getter是Java中抽象的一部分。科特林不在乎这个?
当然可以。但是,您现有的setter和getter没有做任何事情,因此静态编程语言转换删除了它们,选择使用已经存在的默认setter和getter。
让我们假设您的代码如下所示:
private String apiKey;
public void setApiKey(String key) {
this.key = key.toUpperCase();
}
public String getApiKey() {
return key;
}
在这里,setter强制API键始终为大写。
对应的科特林应该是:
var apiKey: String = "THE-DUDE-ABIDES"
set(value) { field = value.toUpperCase() }
apiKey
属性的使用者总是使用getter和setter。只是从语法上讲,Kotlin使调用getter和setter看起来像是访问一个简单的字段。因此,apiKey
的使用者不需要做任何不同的事情来使用重写的setter(使用toUpperCase()
)和默认setter。
您的字段 getter/setter 已转换为 Kotlin Properties。因为字段 getter/setter 非常常见,所以 Kotlin 对它有顶级支持。看起来您可能直接访问裸字段,但事实并非如此。Kotlin 正在向你隐藏 getter 和 setter 的默认实现。在大多数情况下,我们只想在没有任何其他逻辑的情况下获得或设置,因此我们不需要看到它。每当你在 Kotlin 中访问 apiKey
时,你都会通过 getter 或 setter。
至于为什么是公共的,默认情况下属性在Kotlin中是公共的。如何提供自己的get/set实现,以及如何更改它们的访问级别,可以在我上面链接的页面中找到。
我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?
如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。
我正在尝试将我的Java类转换为静态编程语言,这是Java代码: 这就是我把它转换成的: Lambda符号似乎根本不起作用,或者我就是搞不懂。我在Kotlin中发现的所有双函数示例都直接返回这样的值 双函数{名称,年龄- 这在语法上是正确的,但在返回某些内容之前,我需要一些额外的逻辑。出现两条错误消息: > 类型不匹配。必需:单位,找到:字符串 但我确实想返回一个字符串,我还显式声明了它。但是,还
函数应将类型擦除列表转换为,即
为了描述Gradle构建脚本,我们可以通过< code>build.gradle.kts文件使用Kotlin。在< code>dependencies和build 部分全局定义要使用的Kotlin版本是一个常见的问题(在给定的情况下使用不同的版本是相当罕见的)。 请考虑以下代码 (Gradle 4.3.1): 如您所见,kotlin(在本例中为1.2.30)定义了两次:和,它们通常没有区别。由于D
上周我更新了Kotlin 1.5,昨天看到谷歌打算让Jetpack成为设计UI的首选选项后,我想做一些测试。 问题是将我的项目更新为静态编程语言1.5,当尝试构建项目时,我得到以下错误: 静态编程语言1.5与Jetpack Compose不兼容吗?在谷歌搜索问题后,我找到了版本,其中提到了Jetpack Compose,但不是以“不兼容”的方式。 你对此有任何答案吗?我应该使用吗?在这种情况下,我