我有一些非常相似的代码,我想知道是否有办法简化它?
fun parametersOf(vararg pairs: Pair<String, Any>): Parameters {
val p = Parameters(pairs.size)
for ((key, value) in pairs)
when (value) {
is String -> p.put(key, value)
is Int -> p.put(key, value)
is Double -> p.put(key, value)
is Boolean -> p.put(key, value)
else -> throw BBIllegalOperationException("Unknown type for value:'$value' of key:'$key'")
}
return p
}
fun parametersOf(map: Map<String, Any>): Parameters {
val p = Parameters(map.size)
for ((key, value) in map)
when (value) {
is String -> p.put(key, value)
is Int -> p.put(key, value)
is Double -> p.put(key, value)
is Boolean -> p.put(key, value)
else -> throw BBIllegalOperationException("Unknown type for value:'$value' of key:'$key'")
}
return p
}
答案 0 :(得分:3)
您可以保留其中一个功能,并以另一种方式让另一个功能调用它:
fun parametersOf(vararg pairs: Pair<String, Any>) =
parametersOf(pairs.toMap())
或者,使用spread operator来调用vararg
函数:
fun parametersOf(map: Map<String, Any>): Parameters =
parametersOf(*map.toList().toTypedArray())
此外,如果p.put(key, value)
行都调用接受Any
的相同功能(String
,Int
,Double
和{{1}不同由于智能强制转换,您可以用一个{{p>>替换四个Boolean
分支
when