我在java代码中实现了一个在kotlin中定义的接口。 有’空’types不允许在这里

我像这样在kotlin中定义了一个监听器接口

interface FooListener { fun onCall() } 

我认为返回types实际上是kotlin单位

然后我在java中实现了这个接口

 FooListener l = new FooListener() { @Override public void onCall() { } } 

这里的onCall函数实现是由IDE自动生成的

我编译时说错了

 Error:(107, 85) error: 'void' type not allowed here 

任何人都可以帮我解决这个问题吗?

我无法重现这一点。 我想这是编译器的错误,你可以尝试切换到更新的版本。

在我的IDE中,我的代码是:

工作正常。

在这里我想提供两个解决方案:

  • void改成Unit ,并把return Unit.INSTANCE; 在实施的最后。
  • fun onCall()变成fun onCall(): Void? ,并把return null; 在实施的最后。

我尝试了更多的例子,即使我写了一个匿名的内部类(我使用IDE图片而不是代码片段来显示代码是正确的):

或者用一个lambdaexpression式替换它:

它仍然正常工作。

如果仍然无法弄清楚,只需使用标准库提供的另一个接口,如java.util.function.Consumer