Kotlin按类属性委托所有字段

Kotlin按类属性委托所有字段,kotlin,delegation,Kotlin,Delegation,我有一个包装类Manager,它有一个类型为UserInfo的属性managerInfo,我无法修改。包装器类只是围绕info对象添加业务规则。在代码中,每次manager.managerInfo.username有点冗长时,我都需要访问managerInfo的属性并进行写入 我知道我可以像这样将属性委托给此信息对象: class Manager { ... val username by UserInfo ... } 然后我可以简单地执行manager.username。但问题是in

我有一个包装类
Manager
,它有一个类型为
UserInfo
的属性
managerInfo
,我无法修改。包装器类只是围绕info对象添加业务规则。在代码中,每次
manager.managerInfo.username
有点冗长时,我都需要访问managerInfo的属性并进行写入

我知道我可以像这样将属性委托给此信息对象:

class Manager {
...
    val username by UserInfo
...
}
然后我可以简单地执行
manager.username
。但问题是info类有大约15个属性,手工操作会很麻烦

有没有办法通过Kotlin lang或某个库委派所有属性?

您可以这样做,如下所示:

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
}
类事务(
userInfoMap:HashMap
) {
var username:userInfoMap的字符串
var email:userInfoMap的字符串
}

是否可以不使用接口?因为UserInfo没有实现任何接口,我无法修改它。@KirillLiubun不幸的是,没有。另一种方法是在映射中保留
UserInfo
的属性,并按映射进行委派。请参阅更新的答案。