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

interface FooListener {
    fun onCall()
}


我认为返回类型实际上是kotlin中的Unit

然后我在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图片而不是代码片段向您展示代码是正确的):



或将其替换为lambda表达式:



它仍然可以正常工作。

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

10-08 19:58