Chriss:
私は完全に公共のAPIを含むKotlinで書かれているライブラリを持っています。今、図書館の利用者は、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
の方法を?
ローランド:
両方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リファレンスガイド「JavaからKotlinの呼び出しは、」実際にそれを言及していない、Unit
ドキュメントが行います。
このタイプは、に対応し
void
、Javaの種類。
私たちが知っているように、以下の二つは等価です:
fun demo() : Unit { }
fun demo() { }