是否可以在Java中创建任何编译时函数?

Ete*_*ous 5 java gwt

我正在寻找在Java中创建一些在编译时会被调用的函数-并将它们完全排除在运行时之外(例如,已编译的类文件)。这些函数可以写入变量,这些变量对于软件的不同发行版可能具有不同的值。这样做的野兽方法是什么?这些可能是“最终”变量。

顺便说一下,这是一个GWT项目,这些功能应该能够同时写入客户端和服务器端。

考虑以下简单示例:

final int x = 10;
final int y = x/100;
final int z = y + x - 500;
Run Code Online (Sandbox Code Playgroud)

这里定义了三个“最终”变量x,y和z,其中y和z的值取决于x,它是一个常数!这意味着y和z的值在程序中也不会实际更改。但是由于必须将它们定义为x的函数-它们的值将在运行时计算-在运行时不必要地使用资源。编译时函数将对y和z的值进行硬编码,并加快运行速度!显然,这是一个简单的示例,但是我的实际用例需要完成许多复杂的耗时计算,这会使我的应用程序变慢。如果您很快需要使用具有不同变量值的多个版本的应用程序,那么在编译时进行计算将非常好,并且可以避免由于手动对数字进行硬编码而导致的错误。

此外,请考虑以下示例:

final String value = getMyValue("argument");

final String getMyValue(String variable){
    return variable + "Lol!";
}
Run Code Online (Sandbox Code Playgroud)

您是否希望在编译时计算“值”的值?在客户端和服务器端?

Ber*_*ium 2

您正在寻找编译时元编程。这意味着在编译阶段,您的源代码或抽象语法树会以某种方式进行预处理或修改。

如果你看看 C++,就会发现模板元编程

至于Java,我不知道有什么直接的方法可以实现这一点。

所以下一个表亲是Scala:他们称之为,它允许您在编译时修改抽象语法树。例如,我使用它根据布尔条件完全删除代码。

考虑到兼容性,您可以在 Scala 中编写复杂的计算,并从 Java 中使用它。