Kotlin – Как «запоздать» var переопределил интерфейс?

У меня есть интерфейс UserManager

 interface UserManager { var user:User /* ... */ } 

и класс UserManagerImpl , который реализует UserManager

 class UserManagerImpl : UserManager { override var user: User // = must provide an User object /* ... */ } 

Вот моя проблема:

Как разрешить другому классу устанавливать User в UserManager() в любое время ( т. UserManager() Не предоставлять начальный объект User вместе с объявлением свойства и разрешить другому классу создавать и предоставлять экземпляр User )?

Примите во внимание, что

  1. Интерфейсы не могут иметь свойства lateinit
  2. Я хочу, чтобы User был непустым значением, поэтому свойство nullable ( User? )
  3. Я хочу использовать полевой доступ вместо объявления и использовать setUser(User) и getUser() в интерфейсе

Solutions Collecting From Web of "Kotlin – Как «запоздать» var переопределил интерфейс?"