Kotlin中校验Map<String,Any>与非空List,有无更优实现方式?
处理List<*>非null校验的方案
针对你需要确保List<*>无null元素的需求,有两种可行方案,具体如下:
方案一:沿用Map的手动过滤+校验逻辑
和你处理Map的思路保持一致,先过滤出非null元素,再校验原列表是否全部符合要求,不符合则抛出异常:
is List<*> -> { val nonNullList = value.filterNotNull() require(nonNullList.size == value.size) { "List contains null elements" } // 调用接收非null列表的方法 methodForList(nonNullList) // 返回对应的AttributeValue ... }
这种方式逻辑清晰,和Map分支的处理风格统一,团队成员看代码时更容易理解。
方案二:使用Kotlin标准库的requireNoNulls()(推荐)
Kotlin的List<*>自带扩展函数requireNoNulls(),它会直接返回一个无null元素的List<Any>,如果原列表包含null,会立即抛出IllegalArgumentException,完全满足你的需求,代码更简洁:
is List<*> -> { val nonNullList = value.requireNoNulls() // 调用接收非null列表的方法 methodForList(nonNullList) // 返回对应的AttributeValue ... }
这个方法内部的逻辑和手动过滤+校验完全一致,但借助标准库可以减少重复代码,更符合Kotlin的编码习惯。
两种方案都能达到目的,如果你希望和Map分支的处理逻辑完全对齐,选方案一;如果追求代码简洁性和标准库复用,推荐方案二。
内容的提问来源于stack exchange,提问作者Reddi
相关产品推荐
相关产品推荐

