将字符串值转换为变量名 | 字符串值包含变量名

3
Double new_val = 10.0;
String a = "new";
String b = "val";
Double v1 = 25.0;
Double result = 0.0;

Public void getVal() {
    //String variable c contain double variable name
    String c = a+"_"+b;
    //I want to get c's value as 10.0 as its a variable already defined
    result = v1*c;
}

“c”字符串值包含变量名“new_val”,用于进一步使用。

结果 = v1*c; 这不是有效的语义,因为v1是数字而c是字符串。 - Jos
4个回答

4
如果问题是,是否可以在运行时知道变量名并获取其值,那么好消息是......是的,你肯定可以...你需要做一些称为REFLECTION的东西......
这允许开发者检查类并“浏览”类所持有的所有信息。
在您的情况下,您需要通过名称找到一个“变量”(或字段)并读取它的值...
查看文档以获取更多信息,并建议您考虑是否真的需要这样做...通常反射是用于访问另一个类的信息而不是自己浏览的...
您可以重新设计应用程序并定义一些常量和方法,以便其他人可以看到您正在公开什么并使其可用...
示例:
public class Jung {
Double new_val = 10.0;
String a = "new";
String b = "val";
Double v1 = 25.0;
Double result = 0.0;

public void getVal() {
    // String variable c contain double variable name
    String c = a + "_" + b;
    Double cAsVal = 0.0;
    try {
        cAsVal = dale(c);
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
    result = v1.doubleValue() * cAsVal.doubleValue();
    System.out.println(result);
}

public static void main(String[] args) {
    Jung j = new Jung();
    j.getVal();
}

public Double dale(String c)
    throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
    Field field = this.getClass().getDeclaredField(c);
    field.setAccessible(true);
    Object value = field.get(this);
    return (Double) value;
}
}

1

你有什么问题吗?

如果你想执行"25*c",就相当于将一个Double(25)与一个String("new_val")相乘。这是行不通的。


我想将字符串值("c")转换为变量名(Double new_val)。 - mehal.ce
1
还是不清楚... 你想用字符串值创建一个变量名吗? - Jos
你做不到。你怎么想把一个字符串转换成双精度浮点数呢? 例如,你怎么能将字符串str =“myString”转换为Double?反过来是可以的。实际上,如果你想将Double dbl = 28转换为字符串,你可以使用String.valueOf(dbl)。它会返回一个字符串str2 =“28”。 - Souin

1
如果我没记错的话,在Java中,你不能根据另一个变量的值来命名变量。如果你需要将字符串值存储在变量中,你应该创建一个带有字段的类,例如:
class myVariable{
    String name;
    int value;
}

我想将字符串值("c")转换为变量名(Double new_val)。 - mehal.ce

1
我希望能够将字符串值("c")转换为变量名(Double new_val)。
使用reflection可以完成此任务非常棒。
对于您的情况,Map也可以为您解决问题。
public static void main(String args[]){
    HashMap<String, Double> map = new HashMap<String, Double>();
    map.put("new_val", 10.0);

    String a = "new";
    String b = "val";
    Double v1 = 25.0;
    Double result = 0.0;

    //String variable c contain double variable name
    String c = a+"_"+b;
    //String variable c used for calculation
    result = v1 * map.get(c);

    System.out.println(result);
}

请查看使用字符串值作为变量名以获取更多详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接