Как объявить функцию Kotlin с типом возвращаемого значения 'void' для вызывающей стороны Java? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть библиотека, полностью написанная на Kotlin, включая ее публичный API.Теперь пользователь библиотеки использует Java, проблема в том, что функции Kotlin с типом возврата Unit не скомпилированы для возврата типа void.В результате сторона Java всегда должна возвращать Unit.INSTANCE для методов, которые фактически недействительны.Можно ли как-то этого избежать?

Пример:

Интерфейс Kotlin

interface Foo{
  fun bar()
}

Реализация Java

class FooImpl implements Foo{
   // should be public void bar()
   public Unit bar(){  
      return Unit.INSTANCE 
      // ^^ implementations should not be forced to return anything 
   }
}

Возможно ли объявить функцию Kotlin по-другому, чтобы компилятор генерировал метод void или Void?

1 Ответ

0 голосов
/ 06 декабря 2018

Оба Void и void работают, вам просто нужно пропустить этот Unit ...

Интерфейс Kotlin:

interface Demo {
  fun demoingVoid() : Void?
  fun demoingvoid()
}

Класс Java, реализующий этот интерфейс:

class DemoClass implements Demo {

    @Override
    public Void demoingVoid() {
        return null; // but if I got you correctly you rather want to omit such return values... so lookup the next instead...
    }

    @Override
    public void demoingvoid() { // no Unit required...

    }
}

Обратите внимание, что хотя справочное руководство Kotlins 'Вызов Kotlin из Java' на самом деле не упоминает об этом, документация Unit содержит:

Этот тип соответствует типу void в Java.

И, как мы знаем, следующие два эквивалентны:

fun demo() : Unit { }
fun demo() { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...