我正在寻找在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)
您是否希望在编译时计算“值”的值?在客户端和服务器端?
您正在寻找编译时元编程。这意味着在编译阶段,您的源代码或抽象语法树会以某种方式进行预处理或修改。
如果你看看 C++,就会发现模板元编程。
至于Java,我不知道有什么直接的方法可以实现这一点。
所以下一个表亲是Scala:他们称之为宏,它允许您在编译时修改抽象语法树。例如,我使用它根据布尔条件完全删除代码。
考虑到兼容性,您可以在 Scala 中编写复杂的计算,并从 Java 中使用它。
| 归档时间: |
|
| 查看次数: |
1256 次 |
| 最近记录: |