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("...") } 
  • ¿Android Studio 3.0 agrega información de request de parameters?
  • Corda: request de session rechazada por la Parte ya que el solicitante no se ha registrado
  • Android Library Module desarrollado en Kotlin exportado a la aplicación Java causando una resolución fallida de: Lkotlin / jvm / internal / Intrinsics
  • Sobrecarga la ambigüedad de la resolución al llamar a Http.get
  • Kotlin: Equivalente de getClass () para KClass
  • Cómo devolver el resultado en doInBackground después de que finalice el bloque de finalización de la API de inicio de session en UserLoginTask
  • No puede detenerse en la exception en IntelliJ IDEA mientras escribe el código de Kotlin
  • Ejecutar testings unitarias no capta cambios
  • Prueba de la aplicación Android Kotlin: Mockito con Dagger inyecta nulo
  • Android Studio Lint comtesting las funciones de order superior de Kotlin
  • Cómo mantener la reference del object de class singleton en el object complementario, Kotlin