【发布时间】:2016-11-10 13:24:25
【问题描述】:
我有以下抽象类
abstract class Vec2t<T : Number>(open var x: T, open var y: T)
由
实现data class Vec2(override var x: Float, override var y: Float) : Vec2t<Float>(x, y)
到目前为止,一切正常
现在,我想对矩阵做一些类似的事情,这是目前我的抽象类
abstract class Mat2t<T : Number>(open var value: Array<out Vec2t<T>>)
应该由
实现class Mat2(override var value: Array<Vec2>) : Mat2t<Float>(value)
但是编译器抱怨Array<Vec2>:
Error:(8, 32) Kotlin: Type of 'value' doesn't match the type of the type of the overridden var-property 'public open var value: Array> defined in main.mat.Mat2t'
有人告诉我:
- 当我覆盖
var属性时,我无法更改它的类型(但实际上我并没有真正更改它,我正在使用子类型覆盖它。是一样的吗?) -
mat2.value = object : Vec2t<Float>() { ... }无效,Mat2t<Float>的任何子类都不能这样
我该如何克服这些问题?
有没有办法让抽象泛型类Mat2t 带有泛型数组并使用子类型数组实现它?
【问题讨论】: