Преобразование Java Collection.toArray в kotlin

Пожалуйста, помогите мне преобразовать этот код Java в kotlin, я пробую много раз, но не могу

ObjectStream<DocumentSample> bin = ObjectStreamUtils.createObjectStream(categoryStreams.toArray(new ObjectStream[0])); 

Предполагая, что объект категорииStreams является одним из типа Collection (List, Set и т. Д.), Вы можете вызвать метод расширения toTypedArray на нем, чтобы получить массив ObjectStream :

Это должно работать:

 val bin = ObjectStreamUtils.createObjectStream(categoryStreams.toTypedArray()) 

Если метод принимает vararg объекта ObjectStream, то вы можете использовать оператор спреда * для распространения массива на vararg:

 val bin = ObjectStreamUtils.createObjectStream(*categoryStreams.toTypedArray()) 

Преобразование файла Java в Kotlin

  1. В главном меню выберите пункт меню «Код».
  2. Выберите Преобразовать файл Java в файл Kotlin.
  3. Готово.

В вашем случае он преобразуется в:

 val bin = ObjectStreamUtils.createObjectStream(categoryStreams.toArray(arrayOfNulls<ObjectStream>(0))) 

var bin = ObjectStreamUtils.createObjectStream (categoryStreams.toArray (arrayOfNulls (0)))

приведенный выше код преобразует ваш код в kotlin.

В Kotlin вы можете использовать toTypedArray() для получения Array из List :

 categoryStreams.toTypedArray() //Array<ObjectStream<DocumentSample>> 

Затем вы можете использовать оператор спреда для префикса массива и передать его ObjectStreamUtils.createObjectStream() :

 val bin = ObjectStreamUtils.createObjectStream<DocumentSample>(*categoryStreams.toTypedArray()) 

Это звучит как проблема вывода типа. Попробуйте код ниже. Я добавляю объявление для categoryStreams . Не знаете, как это объявлено в вашем коде. Но это разумная декларация от просмотра кода на github.

 val categoryStreams = arrayListOf<ObjectStream<DocumentSample>>() val bin = ObjectStreamUtils.createObjectStream(categoryStreams.toArray(arrayOfNulls<ObjectStream<DocumentSample>>(0))) 

Идея состоит в том, чтобы указать правильный тип вывода (который разработчик не учитывал). Исходная java не выводила тип, это был явный приведение.