Как избежать предупреждения об устаревании при использовании FastUtil IntList из Kotlin

FastUtil содержит оптимизированные реализации коллекций, которые позволяют избежать накладных расходов на автоупаковку. Чтобы уведомить программистов о непреднамеренном автоупаковке, например, при использовании IntList, они пометили метод Integer get(int) как устаревший, предложив вместо него использовать int getInt(int). это приводит к предупреждению об устаревании при использовании синтаксиса индекса массива с такими списками:

import it.unimi.dsi.fastutil.ints.IntArrayList

private fun test() {
    val list = IntArrayList(listOf(1, 2, 3))
    println(list[0]) // deprecation warning on this line
}

Я попытался переопределить get как операторную функцию, но это, похоже, не работает из-за того, что «Расширение затенено участником».

operator fun IntArrayList.get(i: Int): Int {
    return this.getInt(i)
}

Есть ли другой способ использовать синтаксис индекса массива без предупреждения об устаревании и без подавления всех других устареваний?


person Jörn Horstmann    schedule 15.12.2018    source источник


Ответы (1)


Нет, я не верю, что есть. Вы можете написать обертку, которая потребует нетривиального объема работы.

Другие библиотеки примитивных коллекций не обязательно имеют эту проблему, например. Trove TIntList может использовать int get(int offset), поскольку он не расширяет List<Integer>. То же самое для HPC.

person Alexey Romanov    schedule 15.12.2018