Создается ли резервное свойство только для общедоступных свойств?

#android #kotlin #field

#Android #kotlin #поле

Вопрос:

Прежде всего, я прочитал ссылку: Резервные поля

Я не уверен, что понял из ссылки, хотя я видел пример:

Резервные свойства

будет ли создано резервное поле для непубличного свойства?

Ответ №1:

Это не имеет ничего общего с public / private.

Резервное поле создается всегда, если нет пользовательского средства получения (и установки для var ), и оно (ни одно из них) не используется field . Резервное поле — это единственный способ сохранить значение свойства, независимо от того, является ли оно общедоступным. Когда ни получатель, ни установщик не ссылаются field , только тогда оно не будет сгенерировано.

В этом примере свойств резервного копирования (дублируется ниже) _table свойство имеет поле резервного копирования, поскольку оно использует реализацию свойства по умолчанию. У table свойства нет резервного поля, потому что оно не использует его в своем получателе.

 private var _table: Map<String, Int>? = null
public val table: Map<String, Int>
    get() {
        if (_table == null) {
            _table = HashMap() // Type parameters are inferred
        }
        return _table ?: throw AssertionError("Set to null by another thread")
    }