【问题标题】:Dynamic variable names Java动态变量名 Java
【发布时间】:2011-04-27 14:36:48
【问题描述】:

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

例如,我有常量列表

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

【问题讨论】:

  • 你不能那样做,也不想那样做。您想要一个带有“S_R”、“S_W”、... 作为键和相应值的 Map

标签: java


【解决方案1】:

使用带有变量名的普通 HashMap 作为其值的字符串。或者使用 EnumMap 以枚举作为键,将您的值作为值。 AFAIK,这是您在使用 Java 时可以获得的最接近的结果。当然,你可以乱用反射,但 IMO 地图方法更合乎逻辑。

【讨论】:

    【解决方案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”
    • @user608576 完全摆脱了常量。只是 Foo.valueOf("S_R")。它应该返回一个Foo 对象,您可以在该对象上调用getType()getDuration()
    • @user608576:不,它确实返回“S_R”(或者至少不是String“S_R”)。它返回枚举值S_R,您可以使用适当的getter 方法获得type 和/或duration,您必须添加)。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 2020-11-04
      • 2014-07-09
      • 2014-07-28
      • 2010-10-20
      • 1970-01-01
      相关资源
      最近更新 更多