Выявление ошибок в Kotlin‑классе с data class

Extension-функция не получает доступ к private-полям класса, поэтому fullName не компилируется. Перенесите её внутрь Person или откройте нужные свойства осознанно.

Короткий ответ

Что ответить на собеседовании

Extension-функция не получает доступ к private-полям класса, поэтому fullName не компилируется. Перенесите её внутрь Person или откройте нужные свойства осознанно.

Подробный разбор

Ответ с пояснениями

Условие

Найдите и объясните недостатки представленного фрагмента кода на Kotlin. В примере используется data class с приватными полями и расширяющая функция, которая пытается получить к ним доступ.

data class Person(private val givenName: String, private val familyName: String)

fun Person.fullName() = "${this.givenName} ${this.familyName}"

fun main() {
    println(Person("John", "Doe").fullName())
}

Ответ

Extension-функция не получает доступ к private-полям класса, поэтому fullName не компилируется. Перенесите её внутрь Person или откройте нужные свойства осознанно.

Вариант с сохранением приватности:

data class Person(private val givenName: String, private val familyName: String) {
    fun fullName() = "$givenName $familyName"
}

Тогда main напечатает John Doe. Расширения не являются настоящими членами класса и не обходят его инкапсуляцию. Сам data class с private-параметрами допустим, но сгенерированные методы также нужно учитывать, если цель — скрыть чувствительные данные.

Источник: kotlinlang.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее