Jez*_*zor 5 java copy immutability kotlin
假设我有以下 Kotlin 类:
data class Person(val firstName: String, val lastName: String)
Run Code Online (Sandbox Code Playgroud)
因为这是一个data
类,所以会自动生成具有以下签名的方法:
fun copy(firstName: String = this.firstName, lastName: String = this.lastName): Person
Run Code Online (Sandbox Code Playgroud)
现在,我想从 Java 代码中调用此方法,例如:
Person john = new Person("John", "Smith");
Person adam = john.copy("Adam");
Run Code Online (Sandbox Code Playgroud)
我现在期望有两个Person
对象:“约翰·史密斯”和“亚当·史密斯”。
遗憾的是,该copy
方法没有重载变体,并且我看不到任何通过@JvmOverloads
.
到目前为止,我已经尝试重载它并创建一个扩展,但它被隐藏了,并且像 Java 中的静态方法一样工作(加上有很多样板文件):
@JvmOverloads
fun Person.copy(firstName: String = this.firstName, lastName: String = this.lastName): Person {
return this.copy(firstName = firstName, lastName = lastName)
}
Run Code Online (Sandbox Code Playgroud)
是否可以以不需要编写太多代码的方式来完成?
小智 3
不可以,但是我们可以自己重写copy方法。像这样:
data class CustomTextInfo(
val text: String,
val textColor: Int,
val backgroundColor: Int,
val fontId: Int
) {
fun copy(): CustomTextInfo {
return CustomTextInfo(text, textColor, backgroundColor, fontId)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
696 次 |
最近记录: |