在 Java 中,当编译时为 final
字段分配常量值时,将其声明为 static
通常是有意义的。根据相关PMD规则节省了开销。
对于生成的 Javascript 代码,在 GWT 中这样做有什么意义或区别吗?
最佳答案
如果变量在声明为final时被赋值,那么是的,static有一定的意义,但在某些情况下它不应该是static的:
public MyClassWithFinal {
private final String finalVar;
public MyClassWithFinal(String name) {
this.finalVar = name;
}
}
另一种情况:如果实例 var 不是字符串或数字常量,但需要运行构造函数,则该构造函数每次调用时都可能产生副作用,因此仅运行一次与多次运行不同。
也就是说,GWT 将内联/实习常量字符串值,因此如果您有多个字符串字段都分配给相同的值,GWT 可能会检测到并将它们全部提升为静态。
public final String constant = "Some Constant that really ought to be static";
GWT 会注意到,除非声明,否则永远不会分配该字段,甚至可能会删除该字段本身。
最好的规则是从最好的(即最易读、最可维护、最高效)Java 代码开始,并且仅在 GWT 需要特定内容的情况下才打破该代码。这不是其中一种情况:无论您如何编写,编译器都应该执行相同的基本优化。
关于java - 在 GWT 中将最终类变量设为静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9686062/