我有一些非常非常相似的代码,我想知道是否有办法简化它?
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
}
你可以让其中一个函数保持原样,并让另一个函数以任一方式调用它:
fun parametersOf(vararg pairs: Pair<String, Any>) =
parametersOf(pairs.toMap())
或者,使用 spread 运算符调用vararg
函数:
fun parametersOf(map: Map<String, Any>): Parameters =
parametersOf(*map.toList().toTypedArray())
此外,如果p.put(key, value)
行都调用接受Any
的相同函数(由于智能强制转换,String
、Int
、Double
和Boolean
没有不同的函数(,您可以将四个when
分支替换为一个:
when (value) {
is String, is Int, is Double, is Boolean -> p.put(key, value)
else -> throw BBIllegalOperationException("...")
}