Java在常量上容易犯的错
Java的常量在编译期会在引用处本地化,单个java文件改动后编译更新,容易由此引入问题。
举例说明:
本地为测试环境的测试代码,常量配置为测试域名test.xx.com
[code lang="java"]
public class A{
public static final String X_HOST = "test.xx.com";
}
[/code]
线上为正式域名:
[code lang="java"]
public class A{
public static final String X_HOST = "xx.com";
}
[/code]
调用代码为:
[code lang="java"]
public class B{
public static final String LURL = "http://" + A.X_HOST + "/";
public void xxx(){
...
String url = "http://" + A.X_HOST + "/";
...
}
}
[/code]
当需要修改B中省略的代码,只把B.java编译后的B.class替换到线上时,执行出错。
原因在开始时已经说明:在测试环境编译的时候,LURL和url中的A.X_HOST都被B类本地化了,B.class中只有值,没有引用信息。所以上线就错了。