Cómo declarar una función Kotlin con el tipo de retorno 'vacío' para una persona que llama java?

Chriss:

Tengo una biblioteca que está completamente escrito en Kotlin incluyendo su API pública. Ahora un usuario de los usos de la biblioteca de Java, el problema aquí es que las funciones Kotlin con el tipo de retorno Unitno se compilan al tipo de retorno void. El efecto es que el lado de Java siempre tiene que volver Unit.INSTANCE por métodos que son effectivly vacío. Se puede evitar de alguna manera?

Ejemplo:

interfaz Kotlin

interface Foo{
  fun bar()
}

implementación de Java

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

¿Es posible declarar la función Kotlin de manera diferente por lo que el compilador genera una voido Voidmétodo?

Roland:

Tanto Voidy de voidtrabajo, sólo tiene que saltar esa Unit...

Interfaz Kotlin:

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

clase Java que la aplicación de interfaz:

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...

    }
}

Tenga en cuenta que mientras Kotlins guía de referencia 'Calling Kotlin desde Java' en realidad no lo menciona, la Unitdocumentación hace:

Este tipo corresponde al voidtipo en Java.

Y como sabemos, los dos siguientes son equivalentes:

fun demo() : Unit { }
fun demo() { }

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=209617&siteId=1
Recomendado
Clasificación