Java中的#define指令

时间:2018-10-20 22:17:37

标签: java string preprocessor compile-time

我正在寻找一种在Java中使用类似于#define的方法。我知道那里没有预处理器,但是我怀疑这样的事情无法实现。理想情况下,我正在寻找一种用Java翻译此C ++代码的方法:

#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正在询问Java中是否存在#define,答案是否定的。我要问的是如何声明在编译之前求值的字符串常量。

我也知道这样做的用途是有限的,但是尽管如此,我仍然不明白为什么#define NAME Larry上的某些东西没有用。

1 个答案:

答案 0 :(得分:1)

我想我明白你的意思了;您正在使用#define语句来定义自己的DSL;也就是说,您正在编写特定的语句,编译器会将这些语句转换为有效的语法。

那...使用Java并非完全可能。原因是Java的编译方法相对固定。

这可能是一种解决方法;该代码的要点是必须在某一层转换为有效的字节码。如果您打算使用类似DSL的语言,则可以考虑使用GroovyKotlin,它们允许使用更简洁的方式来表达最终将成为有效Java字节码的内容。