Kotlin修改默认构造函数



如何在Kotlin中实现以下目标?

public class Person {
String firstName;
String lastName;

public Person(String name, String somethingElse) {
this.firstName = name.substring(0, 5);
this.lastName = name.substring(5, 10) + somethingElse;
}
}

用例可能有点奇怪,但这在Kotlin应该是可能的,对吧?我有如下的东西,但后来我得到了Conflicting overloads

data class Person(
val firstName: String,
val lastName: String
) {
constructor(name: String, somethingElse: String) :
this(firstName = name.substring(0, 5), lastName = name.substring(5, 10) + somethingElse)
}

您可以有一个配套对象:

data class Person(
val firstName: String,
val lastName: String) {

companion object {
fun create(name: String, somethingElse: String): Person {
return Person(
name.substring(0, 5),
name.substring(5, 10) + somethingElse
)
}
}
}

fun main() {
val person = Person.create("Long first name", "Last name")
println(person)
}

是的,有可能:

data class Person(private val name: String, private val somethingElse: String) {
val firstName: String = name.substring(0, 5)
val lastName: String = name.substring(5, 10) + somethingElse
//You may want to override default "Person(name='$name', somethingElse='$somethingElse')"
override fun toString() = "Person(firstName='$firstName', lastName='$lastName')"
}

最新更新