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 = ax + bX res.y = ay + bY return res } } 

因为这里编译器抱怨ax + bXay + bY

类型不匹配。 要求:T找到:NumberEx

一种方法是采用递归的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>> { ... }