首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中调用kotlin完成

在java中调用kotlin完成
EN

Stack Overflow用户
提问于 2018-06-07 06:24:59
回答 2查看 1.1K关注 0票数 2

我有一个kotlin web请求方法,它接受一个函数作为参数。由于我的一个类是如何设置的,我需要将它保留为一个java类,但我需要从java类调用web请求方法。

我使用Fuel从数据库中获取了一个名为Lock的类

我的kotlin方法如下

代码语言:javascript
复制
fun fetchLocks(completion: (Array<Lock>) -> Unit) {
  // asynchronous api calls that aren't relevant.
  completion(locks)
}

我知道这个方法可以工作,并且能够从kotlin文件中调用它

代码语言:javascript
复制
FuelHelper().fetchLocks { locks ->
  Do stuff with my locks
}

我遇到的问题是为了在java中调用这个方法而获得正确的语法。

代码语言:javascript
复制
new FuelHelper().fetchLocks();

java需要的参数是(Function1<?super Lock[], Unit>)

我已经尝试了一段时间了,但还是无法克服这个问题。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 06:45:14

假设您使用的是java8语法。

代码语言:javascript
复制
new FuelHelper().fetchLocks(locks -> {
    ...
});

或者不使用lambda

代码语言:javascript
复制
new FuelHelper().fetchLocks(new Function1<Lock[], Unit>() {
        @Override
        public Unit invoke(Lock[] locks) {
            return null;
        }
    });
票数 6
EN

Stack Overflow用户

发布于 2018-06-07 06:45:30

正如它所说的--您必须传递一个实现接口Function1 (来自生成的文件Functions.kt的源代码)的对象:

代码语言:javascript
复制
/** 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等)的方式相同:

代码语言:javascript
复制
    new FuelHelper().fetchLocks(new Function1<Lock[], Unit>() {
        @Override
        public Unit invoke(Lock[] locks) {
            // handle locks
            return null;
        }
    });
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50730484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档