Código simplificador que son funciones idénticas excepto por la firma (varargs vs map)

Tengo un código muy similar y me preguntaba si había alguna forma de simplificarlo.

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 } 

Puede dejar una de las funciones tal como está y hacer que la otra lo llame de cualquier manera:

 fun parametersOf(vararg pairs: Pair<String, Any>) = parametersOf(pairs.toMap()) 

O bien, utilizando el operador spread para llamar a la function vararg :

 fun parametersOf(map: Map<String, Any>): Parameters = parametersOf(*map.toList().toTypedArray()) 

Además, si las p.put(key, value) llaman a la misma function que acepta Any (no diferentes para String , Int , Double y Boolean , debido a las versiones inteligentes), puede replace las cuatro when twigs con una:

 when (value) { is String, is Int, is Double, is Boolean -> p.put(key, value) else -> throw BBIllegalOperationException("...") } 
  • Kotlin no puede identificar los parameters a less que se haga reference explícita
  • Enfrentando problemas con kotlin Dagger 2
  • ¿Cómo definir un miembro delegado que se puede anotar en Kotlin?
  • Por qué Netbeans se queja de la ambigüedad, mientras que Intellij no lo hace
  • cómo usar kapt en Android
  • While loop en el lenguaje de progtwigción Kotlin
  • ¿Hay alguna reference para la complejidad del time de la biblioteca Kotlin Standard Collection?
  • ¿Por qué Kotlin recibe una exception detectable no declarada en lugar de una exception ParseException?
  • El tipo Out-Projected en la interfaz genérica prohíbe el uso de metod con un parámetro genérico
  • ¿Es posible aplicar una sola anotación a múltiples objectives de sitio de uso en Kotlin?
  • Fragmento Back stack del segundo fragment al primer fragment