final关键字带来的问题
定义了一个配置类:
public class EsignConfig {
public static final String EsignOrgId = "*****";
// 应用ID
public static final String EsignAppId = "*****";
// 应用密钥
public static final String EsignAppSecret = "*****";
public static final String EsignHost = "https://smlopenapi.esign.cn";
public static void showParamet(){
System.out.println("AppId="+EsignAppId+" Host="+EsignHost);
}
}
使用时:
public class TemplateService extends Exception {
private static String eSignHost= EsignConfig.EsignHost;
private static String eSignAppId=EsignConfig.EsignAppId;
private static String eSignAppSecret=EsignConfig.EsignAppSecret;
public static EsignHttpResponse getComponentsInfo(String docTemplateId) throws EsignException {
CommonFuns.DebugLog("TemplateService.getComponentsInfo eSignAppId="+eSignAppId+" eSignHost="+eSignHost);
}
}
EsignConfig编译了两套,一套测试,一套正式。TemplateService正式、测试都是同一个。但是正式系统始终访问的是测试的参数。
EsignConfig.showParamet(); // 这里输出的正式数据
EsignHttpResponse response = TemplateService.getComponentsInfo(templateIdForE); // 这里输出了测试数据
反编译TemplateService可以看到问题所在:
private static String eSignHost=“****”直接给出了具体值!
这个原因就在于EsignConfig的final关键字!去掉final再编译EsignConfig、TemplateService才是希望的效果