Kotlin,通用添加

时间:2016-11-10 17:52:57

标签: generics math kotlin

是否可以实现通用,例如,添加如下:

public abstract interface NumberEx {

    abstract fun plus(other: NumberEx): NumberEx
}

abstract interface Vec2t<T : NumberEx> {

    open var x: T
    open var y: T

    fun add(res: Vec2t<T>, a: Vec2t<T>, bX: T, bY: T): Vec2t<T> {
        res.x = a.x + bX
        res.y = a.y + bY
        return res
    }
}

因为这里编译器抱怨a.x + bXa.y + bY

  

类型不匹配。必需:T找到:NumberEx

1 个答案:

答案 0 :(得分:6)

一种方法是使用递归NumberEx定义,如下所示:

interface NumberEx<T : NumberEx<T>> {
    operator fun plus(other: T): T
}

这需要一个实现来提供一个加号运算符:

class ANumber : NumberEx<ANumber> {
    override fun plus(other: ANumber): ANumber {
        //TODO
    }
}

并且会使编译器在Vec2t

中使用它是安全且可理解的
interface Vec2t<T : NumberEx<T>> {
  ...
}