Scala中为Case Class字段添加关联取值规则的高效实现
解决方案
要保证amount和currency同来源,核心是先统一判断是否采用metadata作为数据源,再同步两个字段的取值逻辑,避免混合来源。
代码实现
// 先判断是否满足统一使用metadata的条件:relevant为true,且metadata的amount和currency都已定义 val useMetaDataSource = relevant && metadata.amount.isDefined && metadata.currency.isDefined val metaData = MetaData( id = metadata.id, amount = if (useMetaDataSource) metadata.amount else image.amount orElse metadata.amount, currency = if (useMetaDataSource) metadata.currency else image.currency orElse metadata.currency )
逻辑说明
- 当
useMetaDataSource为true时,amount和currency都从metadata取值,严格保证来源一致; - 当
useMetaDataSource为false时,两个字段统一走「优先从image取值,无值则回退到metadata」的逻辑,避免出现混合来源的情况; - 完全符合「若取metadata的amount则必须取metadata的currency,反之亦然」的规则要求。
内容的提问来源于stack exchange,提问作者John Deer
相关产品推荐
相关产品推荐

