Kotlin按类属性委派所有字段

时间:2018-04-24 09:46:48

标签: kotlin delegation

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

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

class Manager {
...
    val username by UserInfo
...
}

然后我可以做manager.username。但问题是,info类有大约15个属性,手动执行此操作会很麻烦。

是否有办法通过Kotlin lang或某些图书馆委托所有财产?

1 个答案:

答案 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
}