我在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
。