functionA()和kotlin中的参数有什么不同
我有两个扩展方法
函数A是:
fun Activity.postDelay1s(run: () -> Unit) { Handler().postDelayed({ run() }, 1000) }
functionB是:
fun CustomRefreshLayout.setUp(containerRecycleView: RecyclerView, onResfresh: () -> Unit) { with(this) { recyclerView = containerRecycleView setColorSchemeColors(Color.BLUE, Color.GREEN, Color.YELLOW, Color.RED) setDistanceToTriggerSync(300) setProgressBackgroundColorSchemeColor(Color.WHITE) setSize(SwipeRefreshLayout.LARGE) setOnRefreshListener { onResfresh() } } }
当我调用函数时a
我使用这种方式postDelay1s { initData() }
,但调用b
我需要使用这种方式swipe.setUp(trade_list, this::initData)
。
我想在这两个扩展函数this::initData
之间的initData()
来区别
你可以像使用函数引用一样调用b( ::initData
),也可以使用类似下面的lambda:
swipe.setUp(trade_list){ initData() }
在大多数情况下不建议使用括号内的lambda也是可以的:
swipe.setUp(trade_list, { initData() })
文档说:
在Kotlin中,有一个约定,如果函数的最后一个参数是一个函数,并且将一个lambdaexpression式作为相应的parameter passing,则可以在括号外指定它
也读这个线程 。
你的函数在参数( () -> Unit
)中使用了相同的types,所以你可以用任何一种方式来调用它们。
让我们来看看第一个语法的作用:
postDelay1s { initData() }
在这里你要创建一个新的lambda(匿名函数),它的主体只包含一个对initData
函数的调用。 你基本上在你的代码中引入了一个额外的重定向级别。
用第二种语法:
postDelay1s(this::initData)
您正在传入对initData
方法的引用 。 这样, initData
方法接管了lambda在以前版本中所扮演的角色 – postDelay1s
函数将直接调用此方法,而不需要额外的步骤。
这两种语法都可以和你的setUp
方法一起使用。
- 错误:在使用Kotlin编译Java代码时,-source 1.3中不支持generics
- 如何在Kotlin中使用Jackson JsonSubTypes注释
- 如何在Kotlin for Android上使用“setTextColor(hexaValue)”,
- 在Kotlin for Android中触发一个接口
- Kotlin的尺寸从6变为2?
- (Java + Kotlin)自动assembly(Autowiring):预计至少有1个bean可以作为这个依赖关系的autowire候选者
- 访问Kotlin实体的属性
- Kotlin:在unit testing中使内部函数可见
- 如何访问反映在kotlin的静态字段?