Как я могу объявить параметр функции, который может быть строкой или функцией в Kotlin?

В следующей функции я хочу передать ей атрибуты для тега html. Эти атрибуты могут быть строками ( test("id", "123") ) или функциями ( test("onclick", {_ -> window.alert("Hi!")}) ):

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

Я попытался объявить value параметра как Any , корневого типа в Kotlin. Но функции не имеют типа Any . Объявление типа dynamic работало, но

  • dynamic тип не является. Он просто отключает проверку параметров для параметра.
  • dynamic работает только для kotlin-js (Javascript).

Как написать эту функцию в Kotlin (Java)? Как типы функций относятся к Any? Есть ли тип, который включает в себя как типы функций, так и Any ?

Вы можете просто перегрузить функцию:

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

Вы могли бы написать:

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

Затем вызовите функцию следующим образом:

 test("attr") test("attr", "hello") test("attr", lambda = { println("hello") }) test("attr") { println("hello") } test("attr", "hello", { println("hello") }) test("attr", "hello") { println("hello") } 
Intereting Posts
Модернизация с помощью качеств Котлина, которые включают реализованные методы Почему HashMap.get не возвращает тип с нулевым значением? Kotlin inheritnce – Не передано значение для контекста параметра Таймер сбой с KotlinNullPointerException внутри фрагмента Kotlin: получить суперкласс из объекта класса – ошибка вывода объекта Как настроить пользовательский шрифт для приложения для Android? Поведение прокрутки списка вложенных списков в Android Как заменить все вхождения подстроки в котлин Как пропустить модели proguard, используемые retrofit2, которые находятся на базовом пакете? Стоимость переключения потоков в RxJava и операции копирования класса данных Kotlin Как добавить серию в диаграмму JavaFX в котлин ConstraintLayout прерывистый сбой макета Есть ли способ ссылаться на класс Java для функции верхнего уровня Kotlin? Модификаторы видимости kotlin не совпадают Настройка «build.gradle» для модуля Kotlin в Android Studio