目前性能我有一个3210:@JvmField对通用/抽象类
abstract class Vec2t<T : Number> {
abstract var x: T
abstract var y: T
...
}
,许多实施的,如this one:
data class Vec2(override var x: Float, override var y: Float) : Vec2t<Float>()
现在,我的愿望是与Java中的Kotlin具有相同的访问行为,即:
val f = v.x
或
v.x = f
但是从Java当然默认为:
float f = v.getX();
或
v.setX(f);
我莫名其妙地减少了 “压力” 通过编写特定access funtions:
fun x(x: T) {
this.x = x
}
fun y(y: T) {
this.y = y
}
所以我可以“只”:
float f = v.x();
或
v.x(f);
但是,我真的很喜欢,如果我能有那些在科特林:
float f = v.x;
或
v.x = f;
的问题是@JvmField
不允许abstract
和性能,但如果切换Vec2t
到:
open class Vec2t<T : Number> {
@JvmFiled open var x: T // error
属性必须被初始化或抽象
无效既不:
@JvmField不能应用于委托物业
,如果我试图将其初始化:
@JvmField open var x = 0 as T
@JvmField只能被应用到最终性能
有我一个机会,我不知道的?
谢谢zsmb,它看起来很完美! – elect
这'Vec2t'实现可以通过将被简化了'@ JvmField'属性直到构造:'抽象类Vec2t(@JvmField VAR X:T,@JvmField VAR Y:T)'。 –
mfulton26
哦,对,我不知道为什么我没有这样做,这很整洁。固定在让我们猜想他们在班级体内。 – zsmb13