2016-07-23 140 views
2
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”和用于进一步将字符串值转换为变量名称|字符串值包含变量名

+0

'结果= V1 * C;'这是不是一个有效的语义,因为v1是数字,c是字符串.. –

回答

3

你如果问题是,是否能得到一个变量在运行时知道它的名字的价值,那么好消息是....肯定,你可以...你需要做一些所谓的REFFLECTION。 ..

它可以让你的开发人员,使类的instrocpection,甚至“浏览”该类持有

你的情况

你需要找到一个“变量”的所有信息(或现场)的名称并阅读其值...

查看文档以获得更多信息,我会建议你考虑一下,如果你真的需要这样做...通常反射是用来当你想从另一类访问的信息,而不是关于浏览自己...

你也许可以重新设计一个小应用程序并定义了一些常量和方法,这样其他可以看到你所暴露给他们,并让他们提供...

例子:

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; 
} 
} 
+0

感谢男人,代码工作得很好 –

+0

欢迎您! –

0

什么是你的问题?

如果你想要做“25 * c”,就像是将Double(25)与一个String(“new_val”)重叠。它不会工作

+0

我想将字符串值(“c”)转换为变量名称(Double new_val) –

+1

仍然不清楚..你想创建一个名称是在一个字符串值的变量? –

+0

你不能。你想如何在Double中转换字符串? 例如,如何将String str =“myString”转换为Double? 另一个方向起作用。确实,你想将Double dbl = 28转换为String,你可以使用String.valueOf(dbl)。它将返回一个字符串str2 =“28” – Souin

0

如果我是正确的,你不能在基于Java中的另一个变量值代码中的变量名称。如果你需要在变量的字符串值,你应该创建域类,例如:

class myVariable{ 
    String name; 
    int value; 
} 
+0

我想将字符串值(“c”)转换为变量名称(Double new_val) –

0

我想字符串值(“C”)转换为变量名(双人间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); 
} 

检查To use a string value as a variable name了解更多详情。