我有一个kotlin对象定义如下:
data class UserUpdateRequest(val map: Map<String, Any?>) {
@get:Email
val email: String? by map
val firstName: String? by map
val lastName: String? by map
}
Run Code Online (Sandbox Code Playgroud)
因此工作正常,所以我遇到的问题是属性可以为空,当我访问一个时,通过这样做instance.email
会抛出一个NoSuchElementException
if if属性未在地图中设置.
相反,如果返回它会更方便null
,因为它是可选的/可空的.有没有办法在不编写自己的代表的情况下实现这一目标?
hot*_*key 13
您基本上可以使用.withDefault { ... }
包装Map
for委托的扩展,以便它执行lambda来计算缺少键的值:
data class UserUpdateRequest(val map: Map<String, Any?>) {
private val defaultMap = map.withDefault { null }
@get:Email
val email: String? by defaultMap
val firstName: String? by defaultMap
val lastName: String? by defaultMap
}
Run Code Online (Sandbox Code Playgroud)
请注意,此包装器不处理简单defaultMap.get(key)
和defaultMap[key]
查询,它只影响defaulMap.getValue(key)
调用(委托实现也恰好使用它).
归档时间: |
|
查看次数: |
405 次 |
最近记录: |