Kotlin – 如何从一个接口“延迟”一个var overrided?

我有一个名为UserManager的接口

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

和一个名为UserManagerImpl的类来实现UserManager

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

这是我的问题:

如何允许另一个类在UserManager()中随时设置User即,不要在属性声明旁边提供一个初始的User对象,并让另一个类创建并提供一个User实例)?

拿这个算

  1. 接口不能有lateinit属性
  2. 我希望User是一个非空值,所以没有可空属性( User?
  3. 我想要使​​用字段访问而不是declare,并在接口中使用setUser(User)getUser()方法

确实,“接口不能有lateinit属性”,但不阻止实现类使用它:

 interface User interface UserManager { var user: User } class UserManagerImpl : UserManager { lateinit override var user: User } fun main(args: Array<String>) { val userManager: UserManager = UserManagerImpl() userManager.user = object : User {} println(userManager.user) } 

打印类似LateinitKt$main$1@4b1210ee