我像这样在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
。