Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA:将字符串解析为静态最终int值_Java_Parsing - Fatal编程技术网

JAVA:将字符串解析为静态最终int值

JAVA:将字符串解析为静态最终int值,java,parsing,Java,Parsing,我有一个简单的问题,但我不能解决它。我有这个界面 public interface KeyInput extends Input { public static final int TEST1 = 0x01; public static final int TEST2 = 0x02; } …此字符串变量 String inputString = "TEST1"; …还有这个方法 public void doSomething(int _input) { } 我想将inp

我有一个简单的问题,但我不能解决它。我有这个界面

public interface KeyInput extends Input {

    public static final int TEST1 = 0x01;
    public static final int TEST2 = 0x02;
}
…此字符串变量

String inputString = "TEST1";
…还有这个方法

public void doSomething(int _input) { 
}
我想将inputString变量解析为KeyInput静态最终int值。这样我就可以打电话给

doSomething(KeyInput.parse(inputString));

我知道的枚举值,但在这里不起作用…

如果只有这两个(或任何其他固定数量的)值,您可以在
开关中枚举它们:

public static int parse(String input) {
    int res = -1;
    switch (input) {
        "TEST1":
            res = TEST1;
            break;
        "TEST2":
            res = TEST2;
            break;
        // ... other options
        default: throw new IllegalArgumentException("unknown string");
    }
}
另一个选项是将此值保留在某些贴图中,因此可以执行以下操作:

private static final Map <String, Integer> TESTS = new HashMap<>();

static {
    TESTS.put("TEST1", 0x01);
    TESTS.put("TEST2", 0x02);
    // ...
}

public static int parse(String input) {
    if (TESTS.containsKey(input))
        return TESTS.get(input);
    else
        throw new IllegalArgumentException("unknown string");
}
在这里,您只需按照您的建议执行
valueOf

public static int parse(String input) {
    return Keys.valueOf(input).getValue();
}
如果所有这些选项现在都适用于您的情况,那么您应该使用反射(尽管,我很确定,情况并非如此):


这里需要反射——或者枚举。不管怎么说,这看起来像一个XY问题,那么你想做什么?你真的不知道你想做什么。“将inputString变量解析为KeyInput静态最终int值”是毫无意义的。这个例子很清楚,你至少知道你想要的结果是什么样的。你到底想做什么?我正在从文本文件中读取一些用户定义的值,我需要将这些值转换为KeyInput界面中描述的静态最终int值。KeyInput不是我的界面,因此其他人可以更改它。感谢您的所有建议和广泛总结;)我还喜欢KeyInput.class.getDeclaredFields();方法。
public static int parse(String input) {
    return Keys.valueOf(input).getValue();
}
public static int parse(String input) {
    Field[] fields = KeyInput.class.getDeclaredFields();

    for (Field field : fields) {
        if (Modifier.isStatic(fields.getModifiers()) && field.getDeclaringClass().equals(int.class) && field.getName().equals(input)) {
            return field.getInt(null);
        }
    }

    throw new IllegalArgumentException("unknown string");
}