Вы на правильном пути, проблема, с которой вы столкнетесь, заключается в том, что вы не можете наследовать от класса данных.
Вы можете либо реструктурировать свой код, чтобы использовать интерфейс, что-то вродеthis:
interface MyClass {
val id: Int
object INVALID : MyClass {
override val id: Int = -1
}
}
data class RealMyClass(override val id: Int) : MyClass
Или иметь open class
, который может быть унаследован как базовый, что дает вам немного более краткий код, так как вы можете повторно использовать свойства, объявленные в базовом классе, в случаенулевой объект - вам все равно придется переопределить его в вашем классе данных, поскольку все параметры конструктора класса данных должны быть свойствами.
open class MyClass(open val id: Int) {
object INVALID : MyClass(-1)
}
data class RealMyClass(override val id: Int) : MyClass(id)