Kotlin 按类属性委托所有字段

Kir*_*bun 3 delegation kotlin

我有一个包装类,它具有我可以\xe2\x80\x99t 修改的类型Manager属性。包装类只是在信息对象周围添加业务规则。在代码中,我需要访问managerInfo的属性,并且每次编写都有点冗长。managerInfoUserInfomanager.managerInfo.username

\n\n

我知道我可以将属性委托给这个信息对象,如下所示:

\n\n\n\n
class Manager {\n...\n    val username by UserInfo\n...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n

hlu*_*kyi 5

您可以通过委托来实现,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

之后该类Transaction将具有所有属性UserCommon,但实现将委托给userInfo传递给构造函数的实现。

另一种方法是转换UserInfo为该MutableMap映射并将属性调用委托给该映射:

class Transaction(
    userInfoMap: HashMap<String, Any>
) {
    var username: String by userInfoMap
    var email: String by userInfoMap
}
Run Code Online (Sandbox Code Playgroud)