Kotlin - 如何 "lateinit" 从接口覆盖的变量?

Kotlin - How to "lateinit" a var overrided from an interface?

我有一个名为 UserManager

的界面
interface UserManager {

    var user:User

    /* ... */
}

和一个名为 UserManagerImpl 的 class,它实现了 UserManager

class UserManagerImpl : UserManager {

    override var user: User // = must provide an User object

    /* ... */
}

这是我的问题:

如何允许另一个 class 随时在 UserManager() 中设置 User 不提供初始User 对象与 属性 声明并让另一个 class 创建并提供一个 User 实例) ?

算上那个

  1. 接口不能有 lateinit 属性
  2. 我希望 User 为非空值,因此不能为空 属性 ( User? )
  3. 我想使用字段访问而不是在接口
  4. 中声明和使用 setUser(User)getUser() 方法

确实 "interfaces cannot have lateinit properties" 但这并不妨碍实施 类 使用它:

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@4b1210ee.

的内容