jtc98257
jtc98257

Reputation: 13

Kotlin modify the default constructor

How would I achieve the following in 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;
    }
}

The use case might be a bit weird, but this should be possible in Kotlin right? I have something like the following but then I get 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)
}

Upvotes: 1

Views: 1217

Answers (2)

user2233706
user2233706

Reputation: 7225

You could have a companion object:

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)
}

Upvotes: 2

Yes, it's possible:

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')"
}

Upvotes: 0

Related Questions