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так что они тоже могут быть легковесами. Без этой информации он не может определить, насколько велики будут элементы массива.

Другие вопросы по тегам