有一个我想缩短的方法(作为我发现将类名和 lambda 放入参数中的一个选项),但这个方法并不完全清楚:
private fun processStickyEvents(Class.name, lambda) {
...
}
这是方法本身:
private fun processStickyEvents() {
EventBus.getDefault().getStickyEvent(FirstClass::class.java)?.let { onFirstEvent(it) }
EventBus.getDefault().getStickyEvent(SecondClass::class.java)?.let { onSecondEvent(it) }
EventBus.getDefault().getStickyEvent(AnotherClass::class.java)?.let { onAnotherEvent(it) }
EventBus.getDefault().removeStickyEvent(FirstClass::class.java)
EventBus.getDefault().removeStickyEvent(SecondClass::class.java)
EventBus.getDefault().removeStickyEvent(AnotherClass::class.java)
}
同样在其中一个论坛上,我发现了这样一个解决方案,不幸的是,它仍然不太适合我的想法:
目前它看起来像
fun <T: Any> getStickyEvent(type: Class<T>): T?
你可以使其具体化inline fun <reified T: Any> getStickyEvent(): T?
然后你可以用作你之前使用的论点T::class.java
的替代品type
谁能指导真人?)