Tag: 模板

在Kotlin中共享Float和Double之间扩展函数的实现

注意:这个问题不是generics类,而是generics函数。 (我不认为它是这个的重复:它比这更具体)。 在我们的项目中,我们有一些实用函数来扩展Double和Float ,比如toFixed (受Javascript’s Number.toFixed启发) fun Double.toFixed(digits: Int):String = java.lang.String.format(“%.${digits}f”, this) fun Float.toFixed(digits: Int):String = java.lang.String.format(“%.${digits}f”, this) 如您所见, Double.toFixed和Float.toFixed具有相同的实现。 因为还有其他几个更复杂的扩展function,所以在一个版本(比如Double.toPrecision )中的改进和错误修复必须手动保持同步(使用Float.toPrecision ),这是无聊和容易出错的。 我尝试将重复的实现移动到共享的函数中,但是(正确)它不能在非绑定函数的上下文中访问它。 为了说明,我希望有这样的事情: private fun toFixed(digits: Int):String = java.lang.String.format(“%.${digits}f”, this) fun Double.toFixed = ::toFixed fun Float.toFixed = ::toFixed 如果有什么语言可以摇摆,肯定Kotlin可以! 思考?

Java / Kotlingenerics

我有一个模板/generics的问题。 这是我目前的代码 data class RealmWatcher( val results: RealmResults, val handler: (RealmResults) -> Unit) 然后在Android片段中使用它来侦听特定的结果并根据更改执行操作。 所以我们以此为例 private val realmListener = arrayOf( RealmWatcher(Realm.getDefaultInstance().where(Notification::class.java).equalTo(“isNew”, true).findAll(), { n: RealmResults -> // DO STUFF }) 我正在做这个片段的开始/停止 override fun onResume() { super.onResume() // start listening and execute realmListener.forEach { it.handler(it.results) } realmListener.forEach { it.results.addChangeListener(it.handler) } } override fun onPause() { // […]