gpt4 book ai didi

kotlin - 简化除了签名(varargs vs map)以外的相同乐趣的代码

转载 作者:行者123 更新时间:2023-12-02 12:43:48 25 4
gpt4 key购买 nike

我有一些非常非常相似的代码,我想知道是否有一种方法可以简化它?

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 operator调用 vararg函数:
fun parametersOf(map: Map<String, Any>): Parameters = 
parametersOf(*map.toList().toTypedArray())

另外,如果 p.put(key, value)行全部调用接受 Any的相同函数(由于智能转换, StringIntDoubleBoolean的功能不同),则可以将四个 when分支替换为一个:
when (value) {
is String, is Int, is Double, is Boolean -> p.put(key, value)
else -> throw BBIllegalOperationException("...")
}

关于kotlin - 简化除了签名(varargs vs map)以外的相同乐趣的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45713515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com