Я ищу способ использовать что-то похожее на #define в Java. Я знаю, что там нет препроцессора, но я сомневаюсь, что что-то подобное невозможно реализовать. В идеале я ищу способ перевести этот код C++ на Java:
#include <cstdio>
#define HelloWorld
#define BEGIN {
#define END }
#define PROGRAM int main()
#define WRITELN(a) puts(a);
PROGRAM HelloWorld
BEGIN
WRITELN("Hello, World")
END
Прежде чем это будет помечено как дубликат, я хочу заявить, что я ищу способ определения строковой константы перед компиляцией, на этом сайте есть вопросы о числовых, но это не то, что я ищу. Мне, видимо, нужно еще раз объяснить, чем отличается этот вопрос. OP вопроса, который кто-то связал, спрашивает, существует ли #define в Java, на что ответ отрицательный. Я спрашиваю, как объявить строковые константы, которые оцениваются перед компиляцией.
И я также знаю, что использование этого ограничено, но, тем не менее, я не понимаю, почему что-то вроде #define NAME Larry не может быть полезным.
Кроме того, это очень плохой способ писать код на C++. Зачем тебе это нужно, чтобы это выглядело так?
Это непонятно - в вашем фрагменте кода не определены строковые константы.
@MCEmperor Я ищу строковую константу, которую нужно объявить перед компиляцией.
@OliverCharlesworth Что именно непонятно и что вы имеете в виду, в моем фрагменте кода не определены строковые константы? Я насчитал 5 из них; stackoverflow.com/a/1431600/9165579
Если вам нужна специальная предварительная обработка, обратите внимание на аннотации.




Думаю, я понимаю, к чему вы клоните; вы используете операторы #define как способ определения вашего собственного DSL; то есть вы пишете конкретные операторы, которые компилятор переводит в допустимый синтаксис.
Это ... не совсем возможно с Java. Причина этого в том, что подход Java к компиляции относительно высечен.
Вероятно, есть способ обойти это; Суть кода в том, что он должен преобразовать в действительный байт-код на каком-то уровне. Если вы намереваетесь получить язык, подобный DSL, вы можете рассмотреть Groovy или Котлин, которые позволяют более чистыми способами выразить то, что в конечном итоге станет действительным байт-кодом Java.
Что ж, если вы ищете константы, вам подойдет что-то определенное как
static final.