从java设置kotlin lambda

1l5u6lss  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(321)

假设我有这样一个简单的数据类:

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

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

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

如何从java调用这个方法?
我试着做一个java lambda,但没能弄明白。它告诉我参数应该是 Function0<Transaction> 但我不太确定该如何定义。
好吧,我想我能做到:

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

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

2admgd59

2admgd591#

如果您的目标至少是jdk8,那么您可以这样做(如果 handleTransaction 在文件中定义 Transaction.kt ):

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

如果你的目标是jdk8以下的任何东西,那么除了你已经找到的以外没有别的方法了。

相关问题