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 Unit
no 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 void
o Void
método?
Tanto Void
y de void
trabajo, 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 Unit
documentación hace:
Este tipo corresponde al
void
tipo en Java.
Y como sabemos, los dos siguientes son equivalentes:
fun demo() : Unit { }
fun demo() { }