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
实例)?
拿这个算
- 接口不能有lateinit属性
- 我希望
User
是一个非空值,所以没有可空属性(User?
) - 我想要使用字段访问而不是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
。
- 用于Java兼容性的公共字段
- 如何使用Realm的方法与Kotlin
- Realm&Kotlin:DefaultRealmModuleMediator.java – > error:unreachable statement
- 使用@PrimaryKey初始化Realm对象0(零)在第二个对象上失败
- 添加Realm类后无法创建Android项目
- 如何将RealmResults <Object>转换为List <Object>
- 将生成的值添加到RealmObject
- CapturedTypeConstructor(*)不是RealmModel的子类型
- 错误:Parceler:无法找到类型io.realm.RealmList的读/写生成器