java—使用字符串值作为另一个变量的名称

cxfofazt  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(433)

这个问题在这里已经有答案了

使用字符串值作为变量名[重复](5个答案)
上个月关门了。
我只是简化我的代码,我遇到了一个小问题,我不能解决。所以我有一个活动,它有一个getter,比如:

private String[][] Example001 ={{"String1","String2"},{"Light","Normal","Heavy"}};

public String getExerciseValue(String variableName ,int codeOrValue,int type){
        switch (variableName){
            case "Example001":
                return Example001[codeOrValue][type];
            case "Example999"
                return Example999[codeOrValue][type];
        }
        return "default";
    }

因此,我宁愿通过这样的方式简化代码,而不是大量的案例

public String getExerciseValue(String variableName ,int codeOrValue,int type){
        return variableName[codeOrValue][type];
    }

我问了一个例子,工作代码工作的情况下,因为我不知道如何解决这个问题。感谢您的建议:)

ttp71kqs

ttp71kqs1#

是的,反射是可能的。
this.getClass().getDeclaredField("attributeNameAsString"); 您可以通过将属性名作为字符串传递(问题中的“variablename”)来访问类的所有属性。
下面是使用反射的示例代码:

import java.lang.reflect.Field;

public class Application {

  private String[][] example001 = {{"String1","String2"},{"Light","Normal","Heavy"}};

  public static void main(String[] args) throws Exception {
    String value = new Application().getValueWithReflection("example001", 0, 1);
    System.out.println(value);
  }

  String getValueWithReflection(String attributeName, int codeOrValue, int type) throws Exception {
    Field field = this.getClass().getDeclaredField(attributeName);
    return ((String[][]) field.get(this))[codeOrValue][type];
  }
}
guykilcj

guykilcj2#

这在java中是不可能的。然而,这也是没有必要的。
每当您有一系列编号的变量名时,这实际上只是实现数组的一种非常麻烦的方法:

private String[][][] examples = {
    {
        { "String1", "String2" }, 
        { "Light", "Normal", "Heavy" }
    }
};

public String getExerciseValue(int exampleNumber, int codeOrValue, int type) {
    return examples[exampleNumber - 1][codeOrValue][type];
}
slwdgvem

slwdgvem3#

建议您使用hashmap,并将每个数组作为一个值,其中包含您的首选名称。类似于:

Map<String, String[][]> examples = new HashMap<>();
examples.put("Example001", Example001);

然后,您可以根据需要轻松地检索元素及其名称和索引。

examples.get("Example001")[codeOrValue][type]

相关问题