Java не может перегрузить операторы. Почему? [дубликат]

6
задан Community 23 May 2017 в 11:52
поделиться

6 ответов

Фактически, он поддерживает перегрузку операторов ... очень ограниченного, встроенного характера. Например, "+" перегружен для String в дополнение к обычной арифметике.

Конечно, большинство людей хотят знать, почему Java не поддерживает перегрузку определяемых пользователем операторов. :-) Самый простой ответ, по-видимому, заключается в том, что создатели Java в то время не видели какого-либо чистого способа добавить его в язык, не создавая при этом беспорядка в Java (например, C ++).

12
ответ дан 8 December 2019 в 02:17
поделиться

http://java.sun.com/docs/white/langenv/Simple.doc2.html

Нет никаких средств, с помощью которых программисты могут перегрузить стандарт арифметические операторы. Еще раз, эффекты перегрузки оператора могут быть так же легко достигнуты путем объявления класса , соответствующих переменных экземпляра, и соответствующих методов для управления {{ 1}} эти переменные. Устранение перегрузки оператора приводит к значительному упрощению кода.

Последнее утверждение, конечно, очень субъективно.

21
ответ дан 8 December 2019 в 02:17
поделиться

Когда-то давно появилась новость о том, что команда Java изучила другие языки (в первую очередь C ++) и попыталась сделать вывод о том, какие функции языкового уровня включать (или исключать) из Java.

Перегрузка операторов была большой новой функцией C ++, и многие начинающие программисты использовали ее для решения проблем интересными способами. К сожалению, большинство из этих способов содержало ошибки, и немногие программисты перегружали операторы способами, «переносимыми для программиста». В результате при чтении программы часто упускается из виду тот «волшебный» код, который был введен в операторе «+» (или в чем-то еще). Помимо чисел (векторов и т. Д.) У вас также были разногласия относительно того, что может означать «+».

Таким образом, прикрытие (не знаю, было ли это правдой) состояло в том, что команда Java увидела, что вы можете просто назвать методы sum.plus (...), и было бы очевидно, что это был вызов написанного пользователем кода (который может быть перегружен), в то время как зарезервированные операции «+» и т. д. будут делать только то, что определено языком. Это повысит удобочитаемость некоторых типов кода за счет нескольких дополнительных слов.

Так ли это, или это попытка наполнить историю рационализациями? Я не знаю. Возможно, разработчики языка просто были заняты, пытаясь заставить работать Java, и не удосужились перегрузить оператора по дате выпуска. В любом случае, это значительно увеличивает удобочитаемость Java в 95% случаев за счет того, что векторная математика становится немного многословной.

1
ответ дан 8 December 2019 в 02:17
поделиться

Цели проекта - сделать Java проще, чем C ++

Мы хотели создать систему, которую можно было бы легко программировать без большого эзотерического обучения и которая использовала бы сегодняшнюю стандартную практику. Таким образом, даже хотя мы обнаружили, что C ++ не подходит, мы разработали Java как можно как можно ближе к C ++, чтобы сделать систему более понятной. {{ 1}} В Java отсутствуют многие редко используемые, плохо понимаемые, сбивающие с толку функции C ++ , которые, по нашему опыту, приносят больше горя, чем пользы.

отсюда: Язык Java: Обзор

3
ответ дан 8 December 2019 в 02:17
поделиться

Обратите внимание, что есть аномалия в том, что оператор «плюс» перегружен для java.lang.String .

2
ответ дан 8 December 2019 в 02:17
поделиться

Код сложнее понять, когда вы используете перегрузку операторов в C ++. Возможно, именно поэтому разработчики Java решили не реализовывать его. На самом деле код, богатый перегруженными операторами, может вводить в заблуждение и его трудно читать, как и код с большим количеством макросов.

2
ответ дан 8 December 2019 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: