Tag: лямбда

Котлин создает внутренний класс для лямбда

В моем коде у меня есть что-то вроде этого: override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) presenter.onCreate() fabContainer.onClick { presenter.onLoginButtonClicked(…) } } Когда я декомпилирую apk и проверяю byteCode, появляется что-то вроде этого: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.presenter.onCreate(); Sdk23ListenersKt.onClick((ProgressFloatingActionButton) _$_findCachedViewById(com.prozis.prozisgo.prozisgo.R.id.fabContainer), new ActAuthLogin$onCreate$1(this)); } final class ActAuthLogin$onCreate$1 extends Lambda implements Function1<View, Unit> { final /* […]

Как перегружать конструкторы в котлин отличается в лямбда-обратном типе

У меня есть два конструктора, которые отличаются только в своем возвратном типе лямбда. Есть ли способ перегрузить их? Я пытался использовать аннотацию JvmOverloads , но это не сработало. constructor(db : Database, handler: ( transaction: Transaction) -> Unit) : this(db, Handler<Transaction>( {handler.invoke(it)})) @JvmOverloads constructor(db : Database, handler: ( transaction: Transaction) -> Any) : this(db, Handler<Transaction>( {handler.invoke(it)}))

Как написать лямбда с дженериками в котлин?

Я могу написать id_Int и id_Boolean с явным типом. И я могу написать identity функции с параметром типа. Могу ли я написать lambdas с параметром типа? fun testFuncInt(f: (Int) -> Int): Int = f(1) + 2 val id_Int = { x: Int -> x } fun testFuncBoolean(f: (Boolean) -> Boolean): Boolean = !f(false) val id_Boolean […]

параметр vararg в лямбда

Я хотел бы определить функцию f() следующим образом: val f: (vararg strings: String) -> Unit = { for (t in it) println(t) } так что я мог бы вызвать его с помощью f("a","b","c") . Для приведенного выше определения f() я получаю ошибку компиляции (указывая на модификатор vararg): Unsupported [modifier on parameter in function type] Как […]

Многострочный / сложный инициализатор свойств без лямбда

Я хочу инициализировать свойство val но инициализатор свойства является сложным (содержит несколько строк кода): private val properties: Properties = { val properties = Properties() val stream = Application::class.java.getResourceAsStream("application.properties") properties.load(stream) properties }.invoke() Возможно ли перезаписать этот инициализатор свойств без использования лямбда?

kotlin как ссылаться на внешнюю область в многослойных приложениях

например: v1?.apply { v2?.apply { call(this, target, outerThis); } } мой вопрос – как обратиться к «externalThis»? спасибо за любую помощь.

Компаратор как лямбда

У меня есть следующий метод в библиотеке Java : public void setColumnComparator(final int columnIndex, final Comparator<T> columnComparator) Идея говорит, что у него есть следующий проретип: setColumnComparator(columnIndex: Int, columnComparator: ((Any!, Any!) -> Int)!) Как я могу использовать его? Я знаю, что это будет String , поэтому я хочу что-то вроде этого, но он не компилируется. setColumnComparator(0, […]

Ввод общей лямбды в карту

Итак, код ниже – это система событий, которая выполняет следующие действия: Присваивает целочисленный id выражению лямбда Помещает идентификатор лямбды в изменяемый набор событий Отображает целочисленный идентификатор в выражение лямбда Возвращает идентификатор (может использоваться позже для удаления событий из лямбда) Код выглядит следующим образом: class EventHandler { companion object { val handlers = HashMap<KClass<out Event>, MutableSet<Int>>() […]

Использование возврата внутри лямбда?

В приведенном ниже коде я хочу показать свои пустые представления, если поездки пусты, а затем вернуться и не запускать приведенный ниже код, но компилятор говорит, что «возврат здесь не разрешен». mainRepo.fetchUpcomingTrips { trips -> if (trips.isEmpty()) { showEmptyViews() return } // run some code if it's not empty } Есть ли способ вернуться так? Я […]

Выражение лямбда не используется

При использовании Android- Switch я setOnCheckedChangeListener к нему setOnCheckedChangeListener и получил это предупреждение Выражение лямбда не используется. Если вы имеете в виду блок, вы можете использовать «run {…}» Вот фрагмент кода: switchAction.setOnCheckedChangeListener({ _, isChecked -> { preferences.userStatus = isChecked switchToggleVisibility(isChecked) if (isChecked) { fetchStats() getOrders() } else { releaseOrder() } } }) Использование run устраняет […]

Давайте будем гением компьютера.