首页 文章

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

提问于
浏览
6

我有一个名为 UserManager 的界面

interface UserManager {

    var user:User

    /* ... */
}

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

class UserManagerImpl : UserManager {

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

    /* ... */
}

这是我的问题:

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

Take in count that

  • 接口不能具有 lateinit 属性

  • 我希望 User 是非空值,因此没有可空属性( User?

  • 我想使用字段访问而不是声明并在界面中使用 setUser(User)getUser() 方法

1 回答

  • 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 之类的东西 .

相关问题