【发布时间】:2021-09-23 21:11:30
【问题描述】:
我遇到了这个问题,我在 SO 中找不到任何问题的解决方案。
我正在使用来自Google's Paging library 的PagingAdapter 方法,它接收一个内联函数作为侦听器:
fun addLoadStateListener(listener: (CombinedLoadStates) -> Unit) {
differ.addLoadStateListener(listener)
}
然后他们提供以下方法来移除监听器
fun removeLoadStateListener(listener: (CombinedLoadStates) -> Unit) {
differ.removeLoadStateListener(listener)
}
我就是这样使用的
myPagingAdapter.addLoadStateListener { it: CombinedLoadStates ->
myPagingAdapter.removeLoadStateListener(this)
}
我知道上面的方法不起作用,但是当文件用 java 编写时它起作用了,因为它在自己的函数中有对自身的正确引用。但是,在 Kotlin 中,我根本找不到这样做的方法。我尝试变成一个匿名函数,但它仍然不会传递正确的上下文
myPagingAdapter.addLoadStateListener { fun(it: CombinedLoadStates) ->
myPagingAdapter.removeLoadStateListener(this)
}
此时我不知道如何删除无法引用自身的内联函数,而且我在任何地方都找不到任何具有解决方案的文档。
如何在 kotlin 中通过引用自身来删除内联函数?
【问题讨论】:
-
不是内联函数。这是一个功能参考参数。内联函数是标记为
inline的函数,这意味着编译后的代码将其内容传输到调用站点,通常是为了启用具体泛型或避免为函数引用参数分配函数对象。参数永远不会内联,但如果它是内联函数的参数,则可以内联。
标签: android kotlin android-paging-library inline-functions android-paging-3