но, возможно, существует заранее определенный способ заранее определить, какой метод использовать
Конечно, просто изучив исходный код подключаемого модуля, который вы настраиваете.Например, их пример плагина Bintray:
bintray {
pkg(closureOf<PackageConfig> {
// Config for the package here
})
}
Если вы изучите источник, вы найдете следующее: https://github.com/bintray/gradle-bintray-plugin/blob/master/src/main/groovy/com/jfrog/bintray/gradle/BintrayExtension.groovy#L35..L37
def pkg(Closure closure) {
ConfigureUtil.configure(closure, pkg)
}
Это simple Closure
поэтому closureOf<T> {}
было бы уместно здесь в соответствии с документами.
Теперь их другой пример для плагина Gretty при настройке ферм:
farms {
farm("OldCoreWar", delegateClosureOf<FarmExtension> {
// Config for the war here
})
}
Если выисследуя источник, вы обнаружите следующее: https://github.com/akhikhl/gretty/blob/master/libs/gretty-core/src/main/groovy/org/akhikhl/gretty/FarmsConfig.groovy#L23..L32
void farm(String name = null, Closure closure) {
if(name == null)
name = ''
def f = farmsMap_[name]
if(f == null)
f = farmsMap_[name] = createFarm()
closure.delegate = f
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure()
}
Это намного сложнее, чем в предыдущем примере, и согласно документам, поскольку это явно предполагает закрытие делегата, тогда delegateClosureOf<T> {}
будетсоответствующий выбор.