Пара моментов, которые здесь, хотя и не являются прямым ответом, актуальны.
Во-первых, у Java нет функций.Он имеет только методы экземпляра или статические методы.Это может показаться педантичным различием, но оно действительно имеет значение (как показано в некоторых других примерах, когда для статического вызова и вызова экземпляра требуются разные формы).
Во-вторых, несоответствие импеданса между системами типоввступает в игру.Чтобы Java имела полноценную поддержку FP на Java-языке, она должна быть статически типизирована.Оказывается, это довольно сложно сделать по-настоящему удовлетворительным образом (см. Обсуждение в списке рассылки lambda-dev для подробностей о подходе, который используется и появится в Java 8).
Из этихВ двух моментах мы видим, что из Clojure лучшее, что мы действительно можем сделать, - это поддержать подход «все ставки выключены» для вызова методов Java через # () или аналогичный метод.Clojure будет выбирать только формы для вызова, основываясь на арности аргумента, поэтому могут потребоваться какие-то подсказки типов или приведение типов, чтобы гарантировать, что вызывается правильный перегруженный метод Java.
Что еще более важно, конечно, если пользователь передает аргумент типа, который Java не ожидает или не может обработать, это может быть невозможно обнаружить до времени выполнения.