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
实例) ?
算上那个
- 接口不能有 lateinit 属性
- 我希望
User
为非空值,因此不能为空 属性 ( User?
)
- 我想使用字段访问而不是在接口
中声明和使用 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
.
的内容
我有一个名为 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
实例) ?
算上那个
- 接口不能有 lateinit 属性
- 我希望
User
为非空值,因此不能为空 属性 (User?
) - 我想使用字段访问而不是在接口 中声明和使用
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
.