Котлин: Что я могу сделать, если библиотека 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.