Kotlin,实例化问题和generics
我有一个类Vec3i延伸Vec3t
data class Vec3i( override var x: Int = 0, override var y: Int = 0, override var z: Int = 0 ) : Vec3t(x, y, z)
作为一个次要的构造如下
constructor(v: Vec3t) : this(vxtoInt(), vytoInt(), vztoInt())
和另一个Vec3ub类,Vec3t总是延伸
data class Vec3ub( override var x: Ubyte = Ubyte(0), override var y: Ubyte = Ubyte(0), override var z: Ubyte = Ubyte(0) ) : Vec3t(x, y, z)
Vec3t依次
abstract class Vec3t( override var x: T, override var y: T, open var z: T ) : Vec2t(x, y)
而Ubyte扩展了Number
我想从Vec3ub实例化一个Vec3i
Vec3i(vec3ub)
但编译器抱怨说,没有构造函数..
为什么我以前引用的二级构造函数无效?
为了完整性,正如我的评论所述,以下内容是正确的:
data class Vec3i( override var x: Int = 0, override var y: Int = 0, override var z: Int = 0 ) : Vec3t(x, y, z) { constructor(v: Vec3t) : this(vxtoInt(), vytoInt(), vztoInt()) } data class Vec3ub( override var x: Ubyte, override var y: Ubyte, override var z: Ubyte ) : Vec3t(x, y, z) abstract class Vec3t( override var x: T, override var y: T, open var z: T ) : Vec2t (x, y) open class Vec2t ( open var x: T, open var y: T ) fun test(vec3ub: Vec3ub) { val vec3i = Vec3i(vec3ub) } abstract class Ubyte : Number()
注意constructor(v : Vec3t
和所有其他添加的generics参数types。 Vec3t
是必要的,而不仅仅是Vec3t
,因为你不传递一个Number
,而是传递一个Number
的子类。