В Kotlin ввели очень полезный элемент with. Грубо говоря, это замена call chaining’у для тех Java API, которые его не поддерживают.
Вместо:
stmt.setInteger(++i, 1); stmt.setString(++i, "Hello"); stmt.setString(++i, "World"); stmt.execute();
Можно писать:
with (stmt) {
setInteger(++i, 1)
setString(++i, "Hello")
setString(++i, "World)
}
Работает так же и с методами, но тут уже нужно быть очень осторожным.
К примеру в Vert.x вызов router.route() каждый раз создает новый Route.
Так что
with (router.route()) {
handler(CorsHandler.create())
handler(StaticHandler.create())
}
Приведет к тому, что на одно Route’е повиснут два Handler’а.
К счастью, Vert.x достаточно умен, чтобы об этом предупредить. Но от более старых фреймворков такой предусмотрительности ждать не стоит.