注:この質問は汎用クラスについてではなく、汎用関数に関するものです。(私はそれがthis oneの複製であることを信じていません:それはそれ以上具体的である)KotlinのFloatとDoubleの間での拡張関数の実装の共有
私たちのプロジェクトでは、我々は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
が同一の実装を持っています。
このようないくつかの他の、より複雑な拡張機能があるので、1つのバージョン(たとえば、Double.toPrecision
)の改善とバグ修正は退屈でエラーが発生しやすくなる、手動(Float.toPrecision
で)同期される必要があります。
複製された実装を共有された<templated>
関数に移動することを実験しましたが、(正しく)バインドされていない関数のコンテキストでthis
にアクセスできません。
private fun <T>toFixed(digits: Int):String = java.lang.String.format("%.${digits}f", this)
fun Double.toFixed = ::toFixed<Double>
fun Float.toFixed = ::toFixed<Float>
任意の言語がこれをロックすることができた場合は、確実にKotlinのことができます。
は、私がこのような何かを期待していた、説明するために!思考?
[Kotlinにおけるジェネリッククラスに対する拡張機能]の可能な重複(https://stackoverflow.com/questions/32883936/extension-functions-for-generic-classes-in-kotlin) –