Generics Kotlin,一般添加

Generics Kotlin,一般添加,generics,math,kotlin,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>

是否可以实现一个通用的,比如说,如下所示的添加:

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
    }
}
公共抽象接口编号{
抽象趣味plus(其他:NumberEx):NumberEx
}
抽象接口Vec2t{
开放变量x:T
开放变量y:T
趣味添加(res:Vec2t,a:Vec2t,bX:T,bY:T):Vec2t{
res.x=a.x+bX
res.y=a.y+bY
返回res
}
}
因为编译器在这里抱怨
a.x+bX
a.y+bY

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


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

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

谢谢,它起作用了。还有一个问题,有没有办法让原始类型(
Float
Int
,等等)扩展
NumberEx
?我读到了“Kotlin,泛型成瘾”:没关系,我们都对Kotlin上瘾了。在b4 Kotlin Anonymous中
class ANumber : NumberEx<ANumber> {
    override fun plus(other: ANumber): ANumber {
        //TODO
    }
}
interface Vec2t<T : NumberEx<T>> {
  ...
}