从Java设置Kotlin Lambda

奎因:

所以说我有一些简单的数据类,像这样:

data class Transaction(
    val time: Long,
    val sender: String,
    val data: ByteArray
)

在Kotlin中,我定义了以下方法:

fun handleTransaction(transactionGetter: ()->Transaction) {
    // do something
}

如何从Java调用此方法?

我尝试过尝试制作Java Lambda,但无法弄清楚。它告诉我该参数应该是a,Function0<Transaction>但是我不太确定如何定义它。


好的,我知道可以做到这一点:

handleTransaction(new Function0<Transaction>() {
    @Override
    public Transaction invoke() {
        // handle getting transaction           
    }
});

这真的是正确的方法吗?这很丑。

ysakhno:

如果您的目标至少是JDK 8,则可以执行此操作(如果handleTransaction在file中定义了功能Transaction.kt):

    public static void main(String[] args) {
        TransactionKt.handleTransaction(() -> new Transaction(
                Instant.now().toEpochMilli(), "system", new byte[0]));
    }

如果您将目标锁定在JDK 8以下,那么除了已经找到的方法之外,别无其他方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章