在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可以! 思考?
通用types的扩展可以通过使用fun
。 这样做, this
是可访问的。
那么问题是,扩展可以用于任何types! 你可以在你的T
上使用上限来限制它:
fun
如果你真的必须限制扩展名只有 Float
和 双 Float
, 只需要扩展具体types。 看看Koltin math
图书馆,可能会有帮助:)(可用于1.2-Beta ):
https://github.com/JetBrains/kotlin/blob/master/js/js.libraries/src/core/math.kt