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才是希望的效果

你可能感兴趣的:(技术杂谈,java,开发语言)