代码之家  ›  专栏  ›  技术社区  ›  Travis Griggs

我可以在Kotlin中扩展Comparable<t>

  •  0
  • Travis Griggs  · 技术社区  · 6 年前

    我想实施 min() / max() Kotlin的别名 Comparable<T>coerceAtLeast() / coerceAtMost() 如果没有其他方法来扩展接口(到目前为止,我只扩展了类)。

    我试过这个:

    fun <T>Comparable<T>.max(other:T) : T {
        return this.coerceAtLeast(other)
    }
    

    但我得到以下错误:

    Type inference failed: Cannot infer type parameter T in fun <T : Comparable<T#1 (type parameter of kotlin.ranges.coerceAtLeast)>> T#1.coerceAtLeast(minimumValue: T#1): T#1
    None of the following substitutions
    receiver: Any?  arguments: (Any?)
    receiver: Comparable<T#2 (type parameter of com.nelsonirrigation.twig.plans.extensions.max)>  arguments: (Comparable<T#2>)
    receiver: T#2  arguments: (T#2)
    receiver: Comparable<Comparable<T#2>>  arguments: (Comparable<Comparable<T#2>>)
    can be applied to
    receiver: Comparable<T#2>  arguments: (T#2)
    

    在这一点上,我对Kotlin仿制药的有限理解基本上溢出了。我想做的是可以实现的吗?我找不到的那块拼图是什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   emerssso    6 年前

    implementation of coerceAtLeast

    fun <T : Comparable<T>> T.coerceAtLeast(minimumValue: T): T
    

    minimumValue Comparable<T> other