Учитывая следующие расширения метода (JsonResult — это просто оболочка с некоторыми дополнительными полями):
fun <T, R> T.toJson(transform: (T) -> R) = JsonResult(transform(this))
fun <T, R> List<T>.toJson(transform: (T) -> R) = JsonResult(this.map(transform))
fun <T, R> Page<T>.toJson(transform: (T) -> R) = JsonResult(this.content.map(transform)
Когда я пытаюсь вызвать любой из вышеперечисленных методов либо из списка, либо из объекта, который не является списком, я получаю ошибку компилятора с сообщением Cannot choose among the following candidates without completing type inference
, которое я ожидаю
import org.springframework.data.domain.Page
val person = Person()
person.toJson { } // compiler error
val people = List<Person>()
people.toJson { } // compiler error
val pageablePeople = Page<Person>
pageablePeople.toJson { }
Интересно, есть ли другой (идиоматический?) способ объявить эти функции без изменения их имен.