是否可以实现通用,例如,添加如下:
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 + bX
和a.y + bY
:
类型不匹配。必需:T找到:NumberEx
答案 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>> {
...
}