在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添加更多值不是问题的一部分。