Articles of java interop

Использование функции Kotlin как типа Java SAM

При вызове методов из Java API, которые ожидают аргументы типа SAM (один абстрактный метод), существует последовательный способ принудительного использования литерала функции для правильного типа? Я нахожу, что иногда функции Котлина работают отлично, а другие не без какой-либо кажущейся последовательности. У меня есть несколько примеров из API Ratpack: При вызове ChainAction.handler(String, Handler) с использованием литерала функции […]

Vert.x Kotlin Тип Несоответствие требуется Обработчик <AsyncResult <Unit >> found (Обработчик <AsyncResult <Unit >>) -> Unit

Ниже приведен метод, переписанный в Kotlin из Java: fun publishMessageSource( name: String, address: String, completionHandler: Handler<AsyncResult<Unit>> ) { val record = MessageSource.createRecord(name, address) publish(record, completionHandler) } Однако, когда я называю это следующим образом: publishMessageSource("market-data", ADDRESS, { record: Handler<AsyncResult<Unit>> -> if (!record.succeeded()) { record.cause().printStackTrace() } println("Market-Data service published : ${record.succeeded()}") }) Я получаю ошибку Type Mismatch […]

Как переопределить свойства классов java в Котлине?

Где-то в Java-коде есть класс ViewHolder : public static abstract class ViewHolder { public final View itemView; public ViewHolder(View itemView) { this.itemView = itemView; } …. } Таким образом, в экземплярах Kotlin этого класса содержится свойство itemView только для itemView типа type View . И я хочу создать общий класс ViewHolder<V> следующим образом: class MyViewHolder<V […]

Котлин: оператор двойной толстой кишки (отражение)

Поэтому я работал с VertX Web, пытаясь заставить его работать с Kotlin. Там есть маршрутизатор, и вы должны сказать что-то вроде val vertx = Vertx.vertx() val server = vertx.createHttpServer() val router = Router.router(vertx) server.requestHandler(router::accept) Но это не сработает. Что я делаю не так? Когда я использую его на определенных классах Kotlin, он ведет себя нормально. […]

Унаследованные декларации платформы сталкиваются при расширении класса Java в Котлине

Я пытаюсь расширить сторонний Java-класс с помощью Kotlin, но я получаю это сообщение компилятора: Унаследованные объявления платформы: следующие объявления имеют одну и ту же подпись JVM (setCollection (Ljava / util / Collection;) V): fun setCollection (коллекция: (Mutable) Collection <(raw) Any?> !: Единица, определенная в KotlinClass fun setCollection (коллекция: (Mutable) Collection <String!>!): Единица, определенная в KotlinClass […]

Почему HashMap.get не возвращает тип с нулевым значением?

Я был немного удивлен, что следующий пример бросает NullPointerException : fun main(args: Array<String>) { val hm = HashMap<String, Int>() hm.put("alice", 42) val x = hm.get("bob") println(x) // BOOM } Я думал, что в NullPointerException Kotlin нет исключений NullPointerException ? Если я аннотирую x с необязательным типом, программа печатает null вместо: fun main(args: Array<String>) { val […]

Изменение имени приемника функции расширения kotlin JVM name

Это общий вопрос. Допустим, у меня есть функция расширения, написанная в kotlin, которая преобразует DP в PX и возвращает NonNull Int fun Int.toPx() { /** implementation */ } Функция в java будет выглядеть примерно так: public int toPx(int $receiver) { /** implementation */ } По-моему, $receiver делает Java-interop чувством генерации и непривлекательности. Я знаю, что […]

Каково намеренное использование @JvmSynthetic в Котлине?

Я столкнулся с @JvmSynthetic аннотацией в kotlin-stdlib, и мне интересно, для чего это необходимо, но, к сожалению, это недокументировано. Насколько я понимаю, применение его к элементу программы добавит synthetic модификатор к соответствующим элементам байт-кода. Как следствие, элемент становится невидимым с Java: class MyClass { @JvmSynthetic fun f() { } } Где-то в Java-коде: MyClass c […]