Функционально! = Функция, и для записи я буду утверждать, что метод! = Функция ...
Java - это статически типизированный объектно-ориентированный язык. Java также поддерживает относительную чистоту таким образом, но его нет рядом с функциональным языком.
Хотя это правда, что вы можете имитировать поведение функционального программирования с помощью императивного программирования, вы никогда не получите тот аккуратный синтаксис, который вы захотите использовать для лямбда-исчисления. В некотором смысле, если язык не поддерживает правильное лямбда-исчисление, это не функциональный язык программирования.
C ++ имеет функции, но C ++ также имеет классы. Поэтому в C ++ есть два типа функций: функции-члены и функции. Когда вы говорите метод, вы имеете в виду функцию-член. Потому что метод вызывается для экземпляра объекта. Но когда вы говорите статический метод, вы имеете в виду просто функцию (в смысле C / C ++). Это просто словарь для ссылки на элементы вашего кода. И в коде Java не может существовать вне класса, метод подразумевает, что он принадлежит какому-то классу, то есть типу.
Пока что ничего из того, что я сказал, не относится к функциональному программированию, но я думаю, что вы поняли, где ошибаетесь.
Я предлагаю вам взглянуть на чисто функциональные языки программирования, такие как Haskell или Erlang. Потому что функциональные языки программирования, как правило, тоже не имеют доводчиков.
Ваше утверждение, что статические методы могут использоваться для имитации функций, поскольку объекты первого класса звучат для меня очень странно. Это больше похоже на динамический язык программирования, чем на функциональное.