Ответ 1
Groovy на самом деле не имеет ссылок на экземпляр-метод с разнесением экземпляра (EDIT: Пока. См. комментарий Wavyx на этот ответ.), поэтому вместо этого вы должны подделать его с помощью закрытий. При использовании ссылочного синтаксиса метода экземпляра в Java 8 вы действительно настраиваете эквивалент лямбда, который ожидает, что вызывающий экземпляр будет первым (в данном случае, только) аргументом.
Таким образом, чтобы получить тот же эффект в Groovy, мы должны создать замыкание, которое использует аргумент по умолчанию it
как вызывающий экземпляр. Вот так:
PersonBulkInserter() {
super("sample", "unit_test")
mapString("first_name", { it.firstName } as Function)
mapString("last_name", { it.lastName } as Function)
mapDate("birth_date", { it.birthDate } as Function)
}
Обратите внимание на использование обозначений свойств Groovy здесь, и что необходимо использовать тип Closure
для @FunctionalInterface
, ожидаемый методом mapString()
или mapDate()
.