Chronicle Values:返回数组而不是单个条目的getter



所以,我有一个值接口这些数组字段getter和setter方法,这是工作的

interface Instrument: Marshallable {
...
fun setBidAt(index: Int, entry: OrderBookEntry)
@Array(length = 10)
fun getBidAt(index: Int): OrderBookEntry
}
interface OrderBookEntry: Marshallable{
var level: Int
var quantity: Long
var price: Double
var orders: Long
var side: OrderBookSide
}

然而,我想要一个getter和setter与整个Array交互,就像:

interface Instrument: Marshallable {
...
fun setBids(entries: kotlin.Array<OrderBookEntry>)
@Array(length = 20)
fun getBids(): kotlin.Array<OrderBookEntry>
}

但如预期的那样遇到了一些异常:

java.lang.IllegalStateException: bids field type class [Lme.oms.instrument.OrderBookEntry; is not supported: not a primitive, enum, CharSequence or another value interface

现在,这是否意味着我不能利用时序值接口,必须创建一个自定义类来实现这一点?我试着看ChronicleValuesChronicleMap测试用例,似乎没有测试这种情况?

编辑:我通过利用kotlin的扩展功能找到了一个解决方案:

fun Instrument.getAsks(): kotlin.Array<OrderBookEntry>{
val array = arrayOf<OrderBookEntry>()
for (i in (0 until OrderBookMaxSize)) {
array[i] = getAskAt(i)
}
return array
}

如果您通过values模块使用接口,则数组的元素也需要为values,因此它们也可以是flyweight。如果没有这些信息,它就无法确定数组元素的大小。

最新更新