所以我的想法是在java中支持#Macro。不仅在最终结果中,而且在编译期间。因此,所有注射和代码完成都将正常工作。
要将宏功能添加到java,我们可以使用CPP。
src/Test.java
:
#define READINT (new java.util.Scanner(System.in).nextInt())
class Test {
public static void main(String[] args) {
int i = READINT;
}
}
cpp
命令:
$ cpp -P src/Test.java preprocessed/Test.java
结果:
class Test {
public static void main(String[] args) {
int i = (new java.util.Scanner(System.in).nextInt());
}
}
编译:
$ javac preprocessed/Test.java
Tnx to aioobe for original idea。
这怎么会只允许我们编译宏,我们需要一种在代码时间使用它的方法,所以如果我做这样的事情:
#define PASTE2(a, b) a##b
#define PASTE(a, b) PASTE2(a, b)
#define setParameter(type,name) private type name;public type PAST(get,name)(){return name;}
用法:
setParameter(int, value)
会产生:
int value;public int getvalue(){return value;}
我希望编译自动完成此方法。因此,它将知道该类包含来自 int
类型的getter getvalue()还有java annotations可以在编译时工作,但我不确定它们是否可行。