Котлин: Что я могу сделать, если библиотека Java перегружена как примитивным, так и коробочным типом?

Например, FastUtil's IntArrayList имеет push метод, который принимает оба int (примитивно) и Integer (в штучной упаковке), но Котлин видит их как одну и ту же функцию push(Int)поэтому я не могу использовать функцию вообще, так как функция неоднозначна.

Что я должен делать, когда библиотека Java имеет перегрузки как для примитивного, так и для штучного типа?

(PS Я знаю, что я могу использовать add(int) метод. Я нахожусь в поиске того, что делать, если я столкнусь с такой проблемой в будущем.)

2 ответа

Рассмотрим эти методы в Java:

void f(int x) { }
void f(Integer y) { }

В Котлине они видны как

f(x: Int)
f(x: Int!)

Второй метод имеет параметр типа платформы, означающий, что он может иметь значение NULL, соответствующее Integer ,

Сначала можно просто позвонить с Kotlin Int прошло:

f(5) // calls f(int x)

Чтобы вызвать второй, вы можете привести аргумент к nullable Int?, таким образом выбирая перегрузку:

f(5 as Int?) // calls f(Integer y)

Вы пытались написать класс Java, чтобы служить в качестве посредника? То есть, напишите свой собственный класс java с методом, который вы хотите видеть Kotlin, а затем вызовите этот метод из своего кода Kotlin.

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