В официальном документе говорится:
Иногда вам может потребоваться вызвать методы Groovy, которые принимают аргументы Closure из кода Kotlin. Например, некоторые сторонние плагины, написанные на Groovy, ожидают закрывающих аргументов.
Чтобы обеспечить способ создания замыканий при сохранении строгой типизации Kotlin, существуют два вспомогательных метода:
closureOf<T> {}
delegateClosureOf<T> {}
Оба метода полезны в разных обстоятельствах и зависят от метода, в который вы передаете экземпляр
Closure
. Некоторые плагины ожидают простого закрытия. В других случаях плагин ожидает закрытия делегата. Иногда по исходному коду невозможно определить, какую версию использовать. Обычно, если вы получаетеNullPointerException
сclosureOf<T> {}
, использованиеdelegateClosureOf<T> {}
решает проблему.
Что ж, у меня нет ничего против подхода «попробуй-сбой-исправь», но, может быть, есть детерминированный способ заранее сказать, какой метод использовать и почему?