Плагин перегрузки операторов для Java - PullRequest
8 голосов
/ 06 января 2010

Я видел хороший Java-компилятор хаки , в котором вы можете заменить утверждения с помощью операторов throw-исключения , вы можете автоматически сгенерировать свойства для полей и и так далее ...

Мне было просто интересно ...

Можно ли взломать компилятор Java, чтобы он поддерживал перегрузку операторов?

РЕДАКТИРОВАТЬ:

Дело не в том, что мне не хватает перегрузки операторов в Java или чего-то еще. Я просто хочу знать, возможно ли реализовать это, используя хаки, упомянутые в ссылках, которые я дал выше. Поэтому, пожалуйста, не предлагайте мне перейти на какой-либо другой язык, например, Scala (который я уже изучаю!: D).

РЕДАКТИРОВАТЬ:

Пожалуйста, просто скажите мне, возможно ли это сделать с помощью JSR 269 или что-то в этом роде. : |

Спасибо.

Ответы [ 7 ]

5 голосов
/ 10 января 2010

В ответ на отредактированный вопрос единственный способ реализовать перегрузку оператора true в Java - добавить его в язык. Это означает, что вам нужно либо изменить компилятор для компиляции кода, либо написать препроцессор, который преобразует ваш код в стандартную Java. В первом случае вы можете загрузить почти полную реализацию FOSS java из GNU или OpenJDK проекта. Что касается последнего, вы можете либо написать свой собственный анализатор, используя такие вещи, как JavaCC и т. Д. (Примеры на этой странице ), либо вы можете использовать JFront в качестве основы для добавления собственного синтаксиса.

4 голосов
/ 22 мая 2012

Возможно реализовать перегрузку оператора Java с использованием JSR 269 с некоторыми взломами. Посмотрите на плагины java-oo для javac и Eclipse JDT:

http://amelentev.github.com/java-oo/

2 голосов
/ 09 января 2010

Вы можете использовать внедрение байтового кода для замены типа, подобного float , на ваш собственный тип. Это можно сделать после компиляции без изменения компилятора.

2 голосов
/ 06 января 2010

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

1 голос
/ 07 января 2010

Другой подход - использование библиотек Groovy, поскольку в Groovy уже есть перегрузка операторов.

https://o24j.dev.java.net/

Текущая реализация использует Groovy для перегрузки. Этот подход имеет один недостаток: заводные библиотеки должны быть доставлены вместе с проектом.

1 голос
/ 06 января 2010

Если вы хотите перегрузить оператор, вы можете перейти к Scala . Scala-код совместим с вашими классами Java и поддерживает перегрузку операторов.

0 голосов
/ 09 января 2010

Не допускается перегрузка оператора, но, учитывая ссылки на ваш вопрос, вас может заинтересовать http://projectlombok.org/features/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...