Java从字符串中按名称获取变量

示例代码:

int width = 5;

int area = 8;

int potato = 2;

int stackOverflow = -4;

现在,说我想让用户输入一个字符串:

String input = new Scanner(System.in).nextLine();

然后,说出用户输入potato。我将如何检索命名的变量potato并对其进行处理?像这样:

System.getVariable(input); //which will be 2

System.getVariable("stackOverflow"); //should be -4

我抬头看了一些东西,却没发现太多。我确实找到了对“反射API”的引用,但是对于这一简单任务而言,它似乎太复杂了。

有没有办法做到这一点,如果是的话,那是什么?如果“反射”确实有效并且是唯一的方法,那么我将如何使用它来做到这一点?它的教程页面包含了各种我无法理解的内部内容。

编辑:我需要将Strings 保留在变量中以进行我的操作。(我不能使用Map

回答:

对于你在这里所做的事情,使用反射似乎不是一个好的设计。最好使用Map<String, Integer>例如:

static final Map<String, Integer> VALUES_BY_NAME;

static {

final Map<String, Integer> valuesByName = new HashMap<>();

valuesByName.put("width", 5);

valuesByName.put("potato", 2);

VALUES_BY_NAME = Collections.unmodifiableMap(valuesByName);

}

Or with Guava:

static final ImmutableMap<String, Integer> VALUES_BY_NAME = ImmutableMap.of(

"width", 5,

"potato", 2

);

Or with an enum:

enum NameValuePair {

WIDTH("width", 5),

POTATO("potato", 2);

private final String name;

private final int value;

private NameValuePair(final String name, final int value) {

this.name = name;

this.value = value;

}

public String getName() {

return name;

}

public String getValue() {

return value;

}

static NameValuePair getByName(final String name) {

for (final NameValuePair nvp : values()) {

if (nvp.getName().equals(name)) {

return nvp;

}

}

throw new IllegalArgumentException("Invalid name: " + name);

}

}

以上是 Java从字符串中按名称获取变量 的全部内容, 来源链接: utcz.com/qa/434885.html

回到顶部