动态变量名称 Java

5

我该如何检索具有动态名称的变量的值?

例如,我有一个常量列表。

public class Constant{
    public static final String S_R = "Standard(240)";
    public static final String S_W = "Standard(180)";
    public static final String L_R = "Large(360)";
    public static final String L_W = "Large(280)";
}

基于数据库,我创建了一个变量名。
String varName = "S" + "_"  +"R"; // This can be S_R , S_W , L_R or L_W
String varVal = // How do i get value of S_R

5
你不能这样做,也不想这样做。你想要一个" S_R"、"S_W"等作为键的Map并对应相应的值。 - Joachim Sauer
3个回答

11

使用普通HashMap,用字符串作为变量名来存储对应的值。或者使用EnumMap,将枚举类型作为键,您的值作为值来存储。据我所知,在Java中这是最接近的解决方式。当然,您可以通过反射来搞事情,但在我看来,使用映射方法更加合乎逻辑。


2
您可以使用一个Map<String, String>,通过其键来查找值。
更好的方法是,您可以使用一个enum
public enum Foo {
    S_R("Standard", 240),
    S_W("Standard", 180),...;

    private String type;
    private String duration;

    // constructor and getters
}

然后调用Foo.valueOf(name)

(您也可以通过反射完成此操作- Constants.class.getField(fieldName) 然后调用 field.get(null) (对于静态字段传入null)。但这并不是一个好的方法.)


使用枚举你是指像Constants.Foo.valueOf("S_R")这样的东西吗?我尝试过了,但不起作用。它返回"S_R"。 - Pit Digger
@user608576 完全摆脱常量。只需使用 Foo.valueOf("S_R") 即可。它应该返回一个 Foo 对象,您可以在其上调用 getType()getDuration() - Bozho
@user608576:不,它不会返回"S_R"(或者至少不是String类型的"S_R")。它返回枚举值S_R,你可以使用相应的getter方法获取type和/或duration(你需要添加这些方法)。 - Joachim Sauer

1
如果您真的必须这样做(而且这是不太可能的),您将需要使用Java的“反射”API。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接