在Java中动态分配其他变量的变量值

在Java中动态分配其他变量的变量值,java,Java,让我们假设我有以下几点: public class Something{ private final String VALUE_AAA = "ABC"; private final String VALUE_BBB = "DEF"; private final String VALUE_CCC = "GHI"; public String getValue(String param) { } } 现在我想知道,如果我将值BBB传递给getValue

让我们假设我有以下几点:

public class Something{

    private final String VALUE_AAA = "ABC";
    private final String VALUE_BBB = "DEF";
    private final String VALUE_CCC = "GHI";

    public String getValue(String param) {

    }
}
现在我想知道,如果我将值BBB传递给getValue,则返回DEF

可能吗?我不想要if-else语句。我考虑过海狸,但我不确定

谢谢,
Hauke

也许你可以使用HashMap

public class Something{

    protected final HashMap<Integer, String>() hashMap = new HashMap<Integer, String>(){{
        put(new Integer(1),"ABC");
        put(new Integer(2),"DEF");
        put(new Integer(3),"GHI");
    }}

    public String getValue(Integer nr) {
        return hashMap.get(nr);
    }
}
公共类{
受保护的最终HashMap()HashMap=新HashMap(){{
put(新整数(1),“ABC”);
put(新整数(2),“DEF”);
put(新整数(3),“GHI”);
}}
公共字符串getValue(整数nr){
返回hashMap.get(nr);
}
}
编辑

这些值集似乎是在类本身中预先初始化的,对于字符串参数,您可以使用:

public class Something{

protected final HashMap<String, String> hashMap = new HashMap<String, String>(){{
    put("AAA","ABC");
    put("BBB","DEF");
    put("CCC","GHI");
}};

public String getValue(String nr) {
    return hashMap.get(nr);
}
公共类{
受保护的最终HashMap HashMap=新HashMap(){{
卖出(“AAA”、“ABC”);
卖出(“BBB”、“DEF”);
出售(“CCC”、“GHI”);
}};
公共字符串getValue(字符串编号){
返回hashMap.get(nr);
}
}


我跳过了“值”,因为如果您决定使用HashMap,就不需要变量名,只需要键。

您可以使用反射:获取当前对象的类,按其名称查找字段,然后在当前对象提取此字段的值:

public class Something {

  private final String VALUE_AAA = "ABC";
  private final String VALUE_BBB = "DEF";
  private final String VALUE_CCC = "GHI";

  public String getValue(String param) throws Exception {
     return (String) this.getClass().getDeclaredField("VALUE_" + param).get(this);
  }
}
更多详情: )对不起,工作代码:

public class HundM
{
    protected final static HashMap <String, String> hm = new HashMap <String, String> (); 

    public static String getValue (String param) {
        return hm.get (param);
    }

    public static void main (String args[])
    {
        hm.put ("AAA", "ABC");
        hm.put ("BBB", "DEF");
        hm.put ("CCC", "GHI");
        System.out.println (getValue ("BBB"));
    }
}
公共类HundM
{
受保护的最终静态HashMap hm=newhashmap();
公共静态字符串getValue(字符串参数){
返回hm.get(param);
}
公共静态void main(字符串参数[])
{
hm.put(“AAA”、“ABC”);
hm.put(“BBB”、“DEF”);
hm.put(“CCC”、“GHI”);
System.out.println(getValue(“BBB”);
}
}

您考虑过使用值数组吗?不,这不是一个选项。我用数字简化了这个例子,但在我的项目中,我需要在value_u的末尾放一个字符串,而不是一个数字。例如VALUE_AAA、VALUE_BBB、VALUE_CCC和I传递给方法BBB。然后可以使用
HashMap
。我所知道的唯一一种可以(相对)直接实现这一点的语言是PHP。好吧,我也考虑过这一点,但我希望类似的东西能够在脚本语言中“String x=VALUE_uz+param;”起作用。我想我会用地图解决方案。谢谢:-)如果你对反射没问题,你可以用它来实现你所需要的。请参见下文。您可能需要getDeclaredField(),因为这些字段是私有的。
未报告的异常java.lang.NoSuchFieldException;必须捕获或声明要抛出
谢谢@deadsven和userunknown。修复了。a)传递字符串(“BBB”),b)缺少关键字“return”。c) 在
()hashMap
中,参数是错误的。如果你删除了它们,它仍然无法编译。@用户未知:如果你注意到了,这个问题是一个编辑过的修订版,带有一个字符串参数,作为OP询问的整数的输入。不,我没有提到。SE规则不鼓励更改编辑的含义,因此在回答和作出反应之前,我不会检查问题的历史。但是,重新运行
返回新字符串[]{“AAA”、“BBB”、“CCC”}[param-1]就足够了,顺便说一句,您的代码没有编译。请注意这个问题,他不希望值被动态地放置,而是作为一个文本,如果您使用HashMap,那么添加“值”有什么意义。但如果不是这样的话,你的代码会很好的。是的,“值”是个愚蠢的想法。非常感谢。“动态放置”是什么意思?这不是问题的范围。一个数据结构(HashMap)和一个表单,用于输入和输出值。正如我所理解的,他是否想在以后向hashmap添加更多值不是问题的一部分。