【问题标题】:#define directive in Java [duplicate]Java中的#define指令[重复]
【发布时间】:2019-03-25 10:05:00
【问题描述】:

我正在寻找一种在 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 这样的东西不能有用。

【问题讨论】:

  • 好吧,如果您正在寻找常量,那么定义为 static final 的东西就很接近了。
  • 另外,这是编写 C++ 代码的一种非常糟糕的方式。为什么需要它看起来像那样?
  • 不清楚 - 您的代码 sn-p 中没有定义字符串常量。
  • @MCEmperor 我正在寻找一个要在编译前贴花的字符串常量。
  • @OliverCharlesworth 到底什么不清楚,你的意思是我的代码 sn-p 中没有定义字符串常量是什么意思?我数了5个; stackoverflow.com/a/1431600/9165579

标签: java string preprocessor compile-time


【解决方案1】:

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

这...用 Java 完全不可能。原因是Java的编译方式比较固定。

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

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2012-07-25
    • 1970-01-01
    • 2011-09-11
    • 2015-03-04
    • 1970-01-01
    • 2021-12-31
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多