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的子类。