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

标签 java string variables reflection

示例代码:

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”的东西的引用,但对于这个简单的任务来说这似乎太复杂了。

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

编辑: 我需要将 String 保留在我正在做的事情的变量中。 (我不能使用 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);
}

或用Guava :

static final ImmutableMap<String, Integer> VALUES_BY_NAME = ImmutableMap.of(
    "width", 5,
    "potato", 2
);

或使用 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 - 从字符串中按名称获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13298823/

相关文章:

java - 如何获取黑白图像的像素值?

javascript - 如何在 THREE.TextGeometry 中添加带上标的字符串?

string - 通过批处理文件删除txt文件中的某些行

arrays - 在 Swift 3 中将字符串转换为数组

php - 创建一个 PHP session 变量挂起我的浏览器

Perl:分派(dispatch)散列和共享变量

Python 类变量不更新

java - 如何将字节数组作为字节写入文件

java - 需要帮助向用户显示列表并使用 Swing 获取他们的响应

java - 为什么当我使用 JPA 一对一双向映射时,我无法直接从一个持久化实体