Потому что так работает сериализация. Например, у вас есть
data class User(val name: String, val id: Int)
val user = User("foo", 1)
и сериализуется в JSON (@Parcelize
не сериализуется в JSON. Это пример.)
{
"name": "foo",
"id": 1
}
Когда он десериализует JSON, ему необходимо создать обратно объект из JSON выше. Без основного конструктора, который имеет все необходимые поля, он не может создать один и тот же объект.
Если у вас сложный объект, вы можете создать отдельный класс для сериализации и создать фабричный метод для принятия этого класса.
Или вы можете реализовать Parcelable
самостоятельно и понять, зачем вам нужны все поля в конструкторе.