Недавно я преобразовал проект Android с Java в Kotlin с помощью плагина Kotlin от Android Studio. Пост-преобразование, много полей в моих классах были выделены, и над ними отобразилось сообщение
Это свойство имеет фоновое поле
Должен ли я сделать вывод о существовании этого сообщения / предупреждения о том, что всегда считается более идиоматичным (в Котлине) использовать свойства с явно определенными геттерами и / или сеттерами? Или IDE является немного более-ревностным с информационными сообщениями? Ответы, которые включают ссылки на официальные источники, предпочитаемые 🙂
Idiomatic – использовать свойства без свойств подложки. Свойства резервной копии – это случай исключения, а также пользовательские getters и seters. Вам нужно знать разницу между «Базовым полем» и «Базовым свойством»:
В документах Kotlin речь идет о резервных полях, которые вы иногда получаете от пользовательских getters / seters и существуют для любого заданного свойства. Существует явное имя для поддержки полей field
, поэтому в установщике вы должны получить доступ к этому полю поддержки под этим именем:
var counter = 0 // the initializer value is written directly to the backing field set(value) { if (value >= 0) field = value }
С другой стороны, свойство резервного копирования – это то, что вы определяете для хранения значения в другом частном имуществе и которым вы полностью контролируете. По соглашению он будет private
и будет иметь префикс с подчеркиванием _
. Это выглядит так:
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") }
Не о чем беспокоиться, это известная проблема с IDE. Выделение – это просто для вашей информации, потому что в определенных случаях для полей поддержки требуется определенная осторожность.
Если это вас беспокоит, просто выключите осмотр. Или измените подсветку, чтобы она была не такой яркой.