Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Java 8: получить оператор-функцию-объект со ссылкой на метод

Автор вопроса: F. BöllerОтветов: 3

Мне было интересно, есть ли в Java 8 возможность получить ссылки на методы стандартных операторов (+, -, ‹, >, ...).

Я хочу получить это как Foo::+, где Foo - это определенное место, где я могу это получить. Поскольку Java не допускает использование специальных символов в именах методов, я не думаю, что это возможно, не так ли?

Если указанный выше способ не существует: есть ли место, где стандартные операторы определены как Foo::plus?

Я знаю, что есть возможность определить его как лямбда ((x, y) -> x + y), но, на мой взгляд, в некоторых случаях это могло бы быть более выразительно со ссылкой на метод на оператор, как это возможно в Haskell.

javajava-8lambdamethod-reference

Ответы

Ответ 1 · рейтинг 7 · Marko Topolnik

Я полагаю, что вы ищете int Integer.sum(int, int) и подобные методы, которые действительно предоставляются API.

В вашем списке отсутствуют многие методы, но JDK обычно не обеспечивает последний дюйм удобства, потому что его размер огромен даже без них.

Если вас это утешит, в каждом из моих проектов есть класс Util, куда я выбрасываю такие лакомые кусочки.

Ответ 2 · рейтинг 1 · gexicide

Чистым способом был бы вспомогательный класс Operators, который содержит методы для всех операторов. Затем вы можете использовать эти методы в качестве ссылок. Конечно, стандартный библиотечный класс был бы лучше, чем собственный вспомогательный класс, но, по крайней мере, вы можете выбрать имя этого вспомогательного класса, так что вы можете выбрать имя, которое наиболее выразительно для вас.

Ответ 3 · dammkewl

Стандартные операторы применяются только к примитивам и примитивам в штучной упаковке, и вы не можете динамически определить, какие операторы применимы к рассматриваемому объекту.

Изменить: если вы хотите знать, какой метод вы можете вызвать для выполнения стандартных функций оператора, вы можете выполнить проверку instanceof для сопоставимого интерфейса для операторов больше/меньше или равно (http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html а>).

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы