Udomomo
11/27/2022, 1:24 PMcopyhashCodeequalstoStringcopycopy// Original data class with private constructor
data class User private constructor(val name: String, val id: Int){
    companion object{
        fun of(name:String, id: Int): User{
            return User(if(name.isEmpty()) "Unknown" else name, id)
        }
    }
}// Workaround with sealed class
sealed class User {
    companion object {
        fun of(name: String, id: Int): User = UserData(if (name.isEmpty()) "Unknown" else name, id)
    }
    abstract val name: String
    abstract val id: Int
    private data class UserData(override val name: String, override val id: Int) : User()
}ephemient
11/27/2022, 1:38 PMephemient
11/27/2022, 1:40 PMUdomomo
11/28/2022, 12:58 AMbecause the data class is private, its methods (such as copy) are not accessibleSo
equalshashCodeephemient
11/28/2022, 1:18 AMAnyephemient
11/28/2022, 1:19 AMval name: Stringval id: Intsealed classephemient
11/28/2022, 1:20 AMcopydata classephemient
11/28/2022, 1:22 AMsealed classprivatetoStringcomponent1ephemient
11/28/2022, 1:31 AMcopyclass User private constructor(val name: String, val id: Int) {
    override fun equals(other: Any?): Boolean = other is User && name == other.name && id == other.id
    override fun hashCode(): Int = name.hashCode() * 31 + int.hashCode()
    override fun toString(): String = "User(name=$name, id=$id)"
    operator fun component1(): String = name
    operator fun component2(): Int = id
    companion object {
        fun of(name: String, id: Int): User = User(name.ifEmpty { "Unknown" }, id)
    }
}Udomomo
11/29/2022, 2:03 PMthey are methods ofOh That’s what I overlooked. Thanks!, which every type inheritsAny