我有一个包装类Manager
,它具有类型为managerInfo
的属性UserInfo
,我无法修改。包装器类只是在info对象周围添加业务规则。在代码中,我需要访问 managerInfo 的属性,并且每次manager.managerInfo.username
都有点冗长。
我知道我可以将属性委托给此信息对象:
class Manager {
...
val username by UserInfo
...
}
然后我可以做manager.username
。但问题是,info类有大约15个属性,手动执行此操作会很麻烦。
是否有办法通过Kotlin lang或某些图书馆委托所有财产?
答案 0 :(得分:1)
您可以执行implementation by delegation,如下所示:
interface UserCommon {
val username: String
val email: String
}
data class UserInfo(
override var username: String,
override var email: String
) : UserCommon
class Transaction(
userInfo: UserInfo
) : UserCommon by userInfo
在该类Transaction
之后将具有UserCommon
所做的所有属性,但实现被委托给传递给构造函数的userInfo
。
另一种方法是将UserInfo
转换为MutableMap
并将属性调用委托给该地图:
class Transaction(
userInfoMap: HashMap<String, Any>
) {
var username: String by userInfoMap
var email: String by userInfoMap
}