我有一个kotlin web请求方法,它接受一个函数作为参数。由于我的一个类是如何设置的,我需要将它保留为一个java类,但我需要从java类调用web请求方法。
我使用Fuel
从数据库中获取了一个名为Lock
的类
我的kotlin方法如下
fun fetchLocks(completion: (Array<Lock>) -> Unit) {
// asynchronous api calls that aren't relevant.
completion(locks)
}
我知道这个方法可以工作,并且能够从kotlin文件中调用它
FuelHelper().fetchLocks { locks ->
Do stuff with my locks
}
我遇到的问题是为了在java中调用这个方法而获得正确的语法。
new FuelHelper().fetchLocks();
java需要的参数是(Function1<?super Lock[], Unit>)
我已经尝试了一段时间了,但还是无法克服这个问题。任何帮助都将不胜感激。
发布于 2018-06-07 06:45:14
假设您使用的是java8语法。
new FuelHelper().fetchLocks(locks -> {
...
});
或者不使用lambda
new FuelHelper().fetchLocks(new Function1<Lock[], Unit>() {
@Override
public Unit invoke(Lock[] locks) {
return null;
}
});
发布于 2018-06-07 06:45:30
正如它所说的--您必须传递一个实现接口Function1
(来自生成的文件Functions.kt
的源代码)的对象:
/** A function that takes 1 argument. */
public interface Function1<in P1, out R> : Function<R> {
/** Invokes the function with the specified argument. */
public operator fun invoke(p1: P1): R
}
在本例中,您可以创建一个匿名类,方法与创建所有小型侦听器(如onClicks等)的方式相同:
new FuelHelper().fetchLocks(new Function1<Lock[], Unit>() {
@Override
public Unit invoke(Lock[] locks) {
// handle locks
return null;
}
});
https://stackoverflow.com/questions/50730484
复制相似问题