Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从映射中读取Java公共变量作为键_Java_Hashmap - Fatal编程技术网

从映射中读取Java公共变量作为键

从映射中读取Java公共变量作为键,java,hashmap,Java,Hashmap,我有一个包含几个静态变量的静态类: public class A{ static { } public static final String param1= "paramVal1"; public static final String param2= "paramVal2"; } 我想更改代码,使变量位于映射中: public class A{ static { } private static Map<String, String> params = new Hash

我有一个包含几个静态变量的静态类:

public class A{
static {
}   
public static final String param1= "paramVal1"; 
public static final String param2= "paramVal2";
}
我想更改代码,使变量位于映射中:

public class A{
static {
}
private static Map<String, String> params = new HashMap<String, String>() ;
    public static void initParams() {
    params.put("param1", paramVal1);
    params.put("param2", paramVal2);
}
公共A类{
静止的{
}
private static Map params=new HashMap();
公共静态void initParams(){
参数put(“参数1”,参数1);
参数put(“参数2”,参数2);
}

然而,我已经有很多类调用这些公共参数,我不想去每个类修改它。有没有办法使用一些define函数,当调用参数时会导致java返回映射值?也就是说,如果有人调用A.param1,它将返回params.get(“param1”)

中的参数不如方法容易使用(和覆盖)。因此我认为对您的问题的简短回答是否定的。这是getter和setter的原因之一。但您可以始终做相反的事情,即保留旧参数以实现兼容性,并使用映射用于新用途:

public class A{
    static {
        param1 = "paramVal1";
        param2 = "paramVal2";
        params = new HashMap<String, String>;
        params.put("param1", param1);
        params.put("param2", param2);
        // eventually other inits for params
    }   
    public static final String param1= "paramVal1"; 
    public static final String param2= "paramVal2";
    public static Map<String, String params;
    /* or better private static Map<String,String> params
       and access via getter */

    public static getParam(String name) {
        return param.get(name);
    }
}
公共A类{
静止的{
param1=“paramVal1”;
param2=“paramVal2”;
params=新的HashMap;
参数put(“参数1”,参数1);
参数put(“参数2”,参数2);
//最终,参数的其他初始化
}   
公共静态最终字符串param1=“paramVal1”;
公共静态最终字符串param2=“paramVal2”;
公共静态映射您可以执行以下操作:

public class A {
  private static Map<String, String> params = new HashMap<String, String>();

  static {
    params.put("param1", "paramVal1");
    params.put("param2", "paramVal2");
  }   

  public static final String param1 = params.get("param1"); 
  public static final String param2 = params.get("param2");
}
公共A类{
private static Map params=new HashMap();
静止的{
参数put(“参数1”、“参数1”);
参数put(“参数2”、“参数2”);
}   
公共静态最终字符串param1=params.get(“param1”);
公共静态最终字符串param2=params.get(“param2”);
}

我想不会。你至少可以创建一个包含hashmap impl的helper类,然后手动转到每个类并对其进行更改。如果我手动转到每个类并对其进行更改,我可以使用该类的hashmap。创建helper类的好处是什么?这是我唯一的理由-可重用性、基于组件的体系结构re是OO的精髓。你为什么要这么做呢?有了常量字段,客户端代码更安全,更容易阅读。