Установка kotlin лямбда от java - PullRequest
0 голосов
/ 24 января 2020

Скажем, у меня есть некоторый простой класс данных, подобный этому:

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

И в Kotlin у меня определен следующий метод:

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

Как мне go о вызове этого метода из Java?

Я пытался сделать java лямбду, но не могу понять это. Это говорит мне, что параметр должен быть Function0<Transaction>, но я не слишком уверен, как определить это.


Хорошо, я понял, что могу сделать это:

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

Это действительно правильный способ сделать это? Это довольно некрасиво.

1 Ответ

2 голосов
/ 24 января 2020

Если вы нацелены как минимум на JDK 8, вы можете сделать это (если функция handleTransaction определена в файле Transaction.kt):

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

Если вы нацеливаетесь на что-либо ниже JDK 8, тогда нет другого пути, кроме того, что вы уже нашли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...