Chronicle Values: геттер, который возвращает массив вместо отдельных элементов
Итак, у меня есть интерфейс значений с этими методами получения и установки поля массива, который работает
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
}
Однако мне нужен геттер и сеттер, которые взаимодействуют со всем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
Означает ли это, что я не могу использовать интерфейс Chronicle Value Interface и для этого мне нужно создать собственный класс? Я пытался смотреть в обоихChronicleValues
иChronicleMap
тестовые случаи, кажется, нет теста для этого сценария?
РЕДАКТИРОВАТЬ : мне удалось найти обходной путь, используя функцию расширения kotlin:
fun Instrument.getAsks(): kotlin.Array<OrderBookEntry>{
val array = arrayOf<OrderBookEntry>()
for (i in (0 until OrderBookMaxSize)) {
array[i] = getAskAt(i)
}
return array
}
1 ответ
Если вы используете интерфейс через модуль, элементы массива также должны бытьvalues
так что они тоже могут быть легковесами. Без этой информации он не может определить, насколько велики будут элементы массива.