¿Cómo puedo declarar un parámetro de function que puede ser una cadena o una function en Kotlin?

En la siguiente function, quiero pasarle attributes para una label html. Estos attributes pueden ser cadenas ( test("id", "123") ) o funciones ( test("onclick", {_ -> window.alert("Hi!")}) ):

 fun test(attr:String, value:dynamic):Unit {...} 

Traté de declarar el value del parámetro como Any , el tipo de raíz en Kotlin. Pero las funciones no son de tipo Any . Declarar el tipo como dynamic funcionó, pero

  • dynamic no es un tipo. Simplemente desactiva la comprobación de tipeo para el parámetro.
  • dynamic solo funciona para kotlin-js (Javascript).

¿Cómo puedo escribir esta function en Kotlin (Java)? ¿Cómo se relacionan los types de function con Any? ¿Hay algún tipo que incluya ambos types de funciones y Any ?

Podría sobrecargar la function:

 fun test(attr: String, value: String) = test(attr, { value }) fun test(attr: String, createValue: () -> String): Unit { // do stuff } 

Podrías escribir:

 fun test(attr: String, string: String? = null, lambda: (() -> Unit)? = null) { if(string != null) { // do stuff with string } if(lambda != null) { // do stuff with lambda } // ... } 

Y luego llame a la function de las siguientes maneras:

 test("attr") test("attr", "hello") test("attr", lambda = { println("hello") }) test("attr") { println("hello") } test("attr", "hello", { println("hello") }) test("attr", "hello") { println("hello") }