Как выразить «эту» ссылку на lambda, которая реализует интерфейс?

#kotlin #lambda #this

#kotlin #лямбда #это

Вопрос:

Мне нужно реализовать прослушиватель для контроллера. И когда возникает какое-то условие, прослушиватель должен быть удален. Условие может быть проверено внутри прослушивателя, чтобы его можно было вовремя удалить.

Вот исходная реализация:

 fooController
        .addListener(object : OnListener {
            override fun onChanged() {
                if (/* some condition which means that the listener is no longer needed*/) {
                    navController.removeListener(this)//how to replace?
                    return@OnListener
                }
                //do on chande regular code
            }
        })
  

но мне нужно было создать объект напрямую и встроить интерфейс формы OnListener. Я не могу понять, как использовать здесь лямбда-выражение. Особенно для «этой» ссылки.

Я попытался написать:

    fooController
          .addListener {
                    if (/* some condition which means that the listener is no longer needed*/) {
                        navController.removeListener(this)//this refer to outer class
                        return@OnListener
                    }
                    //do on chande regular code
                }
            }
  

но здесь ключевое слово «this» относится к внешнему классу. Я знаю, что можно было бы использовать синтаксис «@», но не могу понять,
что должно быть после «этого». Нидер найти в документах.

Комментарии:

1. Это ограничение лямбд. Вы должны продолжать использовать анонимный объект.