Kotlin - 如何从一个接口“覆盖”var的覆盖?

时间:2016-04-20 21:42:12

标签: field kotlin

我有一个名为UserManager

的界面
interface UserManager {

    var user:User

    /* ... */
}

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

class UserManagerImpl : UserManager {

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

    /* ... */
}

这是我的问题:

如何允许其他班级随时在User设置UserManager()不会在该属性旁边提供初始User对象声明并让另一个类创建并提供User实例)?

记入

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

1 个答案:

答案 0 :(得分:8)

"接口确实没有 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的内容。