Simplifying code that are identical funs except for the signature (varargs vs map)

Viewed 42

I have some very very similar code and I was wondering if there was a way to simplify it?

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
}
1 Answers
Related