Вы имеете дело с двумя различными способами объявления свойств:
Свойство с вспомогательным полем
Если вы объявляете свойство context
и назначаете его следующим образом:
private val context: Context = ApplicationProvider.getApplicationContext<Context>()
вы создали свойство с базовым полем .
ApplicationProvider.getApplicationContext<Context>()
оценивается один раз, когда создается экземпляр класса.Поскольку context
является неизменным (val
) каждый раз, когда возвращается одно и то же значение (которое было назначено вызовом функции).
Свойство без вспомогательного поля
Если вы объявите context
таким образом
private val context: Context get() = ApplicationProvider.getApplicationContext<Context>()
, вы создали свойство без вспомогательного поля.ApplicationProvider.getApplicationContext<Context>()
будет оцениваться каждый раз при доступе к context
.Значение, возвращаемое getter , может изменяться в зависимости от того, возвращает ли перенаправленный вызов функции что-то другое.
Что использовать?
Итак,это зависит от вашего варианта использования, но в этом конкретном случае я бы порекомендовал вам использовать свойство без варианта вспомогательного поля по двум причинам:
- вы не можете быть уверены, что
ApplicationProvider.getApplicationContext<Context>()
всегда будет возвращатьто же значение, по крайней мере, в документации не упоминается, что явное - перенаправление вызова функции не окажет существенного влияния на производительность