Когда я должен предпочесть const верхнего уровня против const объекта-компаньона? - PullRequest
2 голосов
/ 07 апреля 2020

Мне интересно, когда мне следует использовать const верхнего уровня и когда объект-компаньон? И я должен рассмотреть, что использовать, если свойство является частным или общедоступным c?

const val URI = "sdfsdfsdf"

или мне следует использовать:

companion object {
    const val URI = "sdfsdfsdf"
}

и имеет ли значение, что использовать, когда мы имеем дело с видимостью?

1 Ответ

1 голос
/ 07 апреля 2020

Согласно JetBrains :

Рекомендуется никогда не использовать объект для создания пространств имен и всегда использовать объявления верхнего уровня, когда это возможно. Мы не обнаружили, что конфликты имен были проблемой, и если у вас есть конфликт, вы можете разрешить его, используя импорт с псевдонимом.

Итак, основываясь на этом, ответ на ваш первоначальный вопрос

Когда я предпочитаю верхний уровень const [...]?

равен всегда .

Это, однако, рекомендации и, в конце концов, вам решать, как вы хотите организовать свой код и использовать функцию дополнения кода в IDE. Иногда лучше не загрязнять ваше глобальное пространство имен ради автодополнения. Поскольку эта проблема / вопрос широко обсуждалась во многих потоках (например, здесь или здесь ), и я бы сказал, что это сильно зависит от ваших предпочтений, я оставлю это здесь.

Если вы хотите знать, что происходит внутри, то с точки зрения байт-кода существует небольшая разница между двумя подходами. Обе константы объекта верхнего уровня или (сопутствующего) объекта заканчиваются как члены stati c некоторого класса, но объектный подход дополнительно создает поле stati c INSTANCE, которое содержит ссылку на объект. Память о том, что это не должно иметь большого значения, но хорошо знать об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...