5

How will I be able to retrieve the value of a variable which has a dynamic name

For Example I have list of constants

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)";
}

Based on database I build a variable name

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
1
  • 5
    You can't do that and don't want to do that. You want a Map with "S_R", "S_W", ... as keys and the corresponding values. Commented Apr 27, 2011 at 14:40

3 Answers 3

11

Use a normal HashMap with variable names as strings against their values. Or use a EnumMap with enums as key and your value as values. AFAIK, that's the closest you can get when using Java. Sure, you can mess around with reflection but IMO the map approach is much more logical.

Sign up to request clarification or add additional context in comments.

Comments

2

You can use a Map<String, String> and locate the value by its key.

Even better, you can have an enum:

public enum Foo {
    S_R("Standard", 240),
    S_W("Standard", 180),...;

    private String type;
    private String duration;

    // constructor and getters
}

And then call Foo.valueOf(name)

(You can also do this via reflection - Constants.class.getField(fieldName) and then call field.get(null) (null for static). But that's not really a good approach.)

3 Comments

Using Enum Do you mean something like Constants.Foo.valueOf("S_R"); I tried that and didnt work. It returns "S_R"
@user608576 get rid of Constants completely. Just Foo.valueOf("S_R"). It should return a Foo object on which you can call getType() and getDuration()
@user608576: no, it does not return "S_R" (or at least not the String "S_R"). It returns the enum value S_R of which you'd get the type and/or duration using the appropriate getter methods, which you'd have to add).
1

If you really must do this (and it's unlikely), you would have to use the Java "reflection" APIs.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.