С одной стороны, внутренние классы используют внешний экземпляр в качестве скрытого первого параметра конструктора (который фактически равен private val
). С другой стороны, поведение класса данных предоставляет все параметры конструктора, включая их имена (в toString()
), поэтому они «должны быть» видимыми. Кроме того, в этом случае
Если у супертипа есть функции componentN (), которые открыты и возвращают совместимые типы, соответствующие функции генерируются для класса данных и переопределяют функции супертипа. Если функции супертипа не могут быть переопределены из-за несовместимых сигнатур или являются окончательными, сообщается об ошибке:
должен component1()
быть внешним экземпляром или первым параметром, который вы фактически написали?
Дизайнеры, вероятно, решили, что любое поведение будет удивлять достаточное количество пользователей, поэтому лучше вообще это не разрешать. И если вы хотите, чтобы ваш UserProperty
был подобен внутреннему классу, просто добавьте параметр конструктора User
самостоятельно.