目前性能我有一個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