Может ли kotlin определить динамический метод, когда class init?

Мои занятия:

class Demo { init { // define method here my some array:[a,b,c] // such as fun Demo.a,Demo.b... } } 

Названия функций динамические.

Может ли Котлин это сделать?

Нет, вы не можете динамически определять функции в классах, но поскольку функции также являются объектами, вы можете динамически их хранить (в поле, массив, карту) и динамически ихзывать. Используя некоторые языковые особенности Kotlin, мы можем получить довольно краткий синтаксис:

 class Demo(name: String) { private val functions: Map<String, () -> Any> = mapOf(name to { "Hello $name" }) operator fun get(name: String): Any? = functions[name]?.invoke() } fun main(args: Array<String>) { val demo = Demo("Kirill") println(demo["Kirill"]) } 

Вывод:

Привет, Кирилл

Нет, Котлин – статически типизированный язык. Это означает, что тип каждой переменной и метод должен быть известен во время компиляции.

Intereting Posts
ImageButton OnClickListener не работает Можно ли добавить «статическую» функцию расширения для Java-класса? Лотовое использование Котлин Лучший способ справиться с таким сценарием, где «умный литье невозможно» Kotlin coroutines: использование синхронного использования cassandra vs для перевода асинхронного использования restAssured – невозможно обработать почтовый метод Dagger2 не может получить доступ к nullable. javax.annotation.Nullable не найден Как отправить текстовые данные на канал Thinkspeak из приложения Android? Как я могу явно передать завершение Flowable в RxJava? Как получить javaclass из массива java-типа в Котлине? Несоответствие типа Kotlin после преобразования в Android Studio Anko игнорирует layout_margin, определенный в стиле JNI GetShortArrayElements не работает с SIGSEGV SEGV_ACCERR Android Room + шаблон Kotlin Использование цветов, определенных в базовом модуле из функционального модуля, не выполняется после восстановления Android Instant App