Подобно Можно ли создать новый оператор в C # ?, можно ли создать свой оператор для Java? Сначала я бы сказал нет, поскольку вы не можете перегрузить, но опять же, String поддерживает + и + = (неявно через StringBuilder во время выполнения и т. Д.).
Можно ли создать собственный оператор в Java?
Ответы (6)
Java этого не допускает.
Однако, если вы хотите добиться такого синтаксиса, имея возможность запускать свой код на JVM (и с другим кодом Java), вы можете посмотреть на Groovy, в котором есть перегрузка оператора (и с которой вы также можете использовать DSL для краткого синтаксиса, который будет иметь эффект, аналогичный использованию пользовательских операторов).
Обратите внимание, что определение пользовательских операторов (а не только перегрузка) - это большая проблема для любого языка, поскольку вам нужно будет каким-то образом изменить лексический анализатор и грамматику.
a.multiply(b.multiply(c.add(d)).add(e))
не очень хорошо ... NumPy хорошо использует перегрузку операторов в Python.
- person Bruno; 24.04.2012
Нет, таким образом Java не расширяется. Вы не можете добавлять операторы и даже больше не можете перегружать встроенные операторы, такие как +
- даже стандартные библиотечные классы, такие как BigInteger, должны использовать такие методы, как add()
, а не такие операторы, как +
.
Scala (еще один статический язык JVM) обходит это, используя вызовы методов, а не встроенные операторы, и разрешая любые символы в именах методов, поэтому вы можете определять новые методы, которые выглядят как операторы, т.е.
a + 1
синтаксический сахар для:
a.+(1)
Нет, в Java нельзя перегружать специальные символы для операторов.
Как уже говорили все остальные, вы абсолютно не можете добавлять новые операторы в Java. Однако другие языки JVM, дружественные к Java, например Groovy, позволяют определять новые операторы из существующих токенов операторов.
Нет. Прочтите эту статью, чтобы узнать, почему они не должны быть такими: http://java.dzone.com/articles/why-java-doesnt-need-operator
Вы можете использовать другой язык, например Scala, для достижения этого на платформе java. - https://stackoverflow.com/a/1991348/1342121
Нет. Java не допускает перегрузки операторов. Дополнительное обсуждение можно увидеть здесь: https://javarevisited.blogspot.com/2011/08/why-java-does-not-support-operator.html