どのようにJavaの呼び出し元に対する「無効」戻り値の型を持つKotlinの関数を宣言するには?

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の関数を宣言することは可能ですvoidVoidの方法を?

ローランド:

両方Voidvoid仕事、あなたはちょうどそれをスキップする必要があります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() { }

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=209614&siteId=1