0

可能重复:
Java 中的动态变量名称:

假设我有一个字符串,如下所示。

String s = "Hello";

现在,我想创建一个字符串,但字符串的变量将被称为“Hello”。为了使字符串的名称为“Hello”,我必须访问字符串s以获取名称“Hello”,这样我就可以将它用作变量名。下面是我想看到的。

String Hello = "I want to do this, But from Accessing String s So I KNOW that String s = Hello";

感谢您的努力,请尝试向我解释,因为我是 Java 初学者。:D

4

5 回答 5

3

您尝试做的是添加一个间接层。您不能在 Java/C/C++/Pascal/等静态语言中动态访问变量

您可以做的是模拟动态语言使用的动态上下文,例如,在这种情况下创建一个 Map 来保存变量名称和值

Map<String,String> stringVars = new HashMap<String,String>();

// set a "variable"
stringVars.put("Hello", "value");

// get a "variable"
System.out.println(stringVars.get("Hello"));
于 2012-09-16T12:20:51.033 回答
2

使用反射(不推荐):

public class MainClass
{
    public String Hello = "I want to do this, But from Accessing String s So I KNOW that String s = Hello";

    public static void main(String[] args) throws Exception
    {
        MainClass m = new MainClass();

        String s = "Hello";
        String result = (String) MainClass.class.getField(s).get(m);
        System.out.println(result);
    }
}

输出:

I want to do this, But from Accessing String s So I KNOW that String s = Hello

相反,请使用其他说明的地图。

于 2012-09-16T12:31:45.860 回答
0

您能否使用一个 Map 接受一个字符串(例如“Hello”)并将其映射到另一个字符串(例如“我想这样做,但是通过访问 String s 所以我知道 String s = Hello”)。类似于以下内容:

Map<String, String> stringMap = new HashMap<String, String>();
stringMap.put("Hello", "I want to do this, But from Accessing String s So I KNOW that String s = Hello");

然后你可以通过调用找到地图中的所有键值(例如“Hello”):

Set<String> stringKeys = stringMap.keySet();

您可以像这样查找属于键“Hello”的长字符串:

String longValue = stringMap.get("Hello");

这就是我如何使用简单的字符串值来查找笨拙的字符串值。请记住,您还可以使用 Map 将 String 值映射到任何其他类型的对象。

于 2012-09-16T13:42:45.167 回答
0

这在java中是不可能的。

您唯一能做的就是使用 Amap接口的实现,例如HashMap. 使用一种put方法,您可以为给定的“名称”“分配”一个值。该名称将是 akey并且在映射中必须是唯一的,就像变量在其范围内具有唯一名称一样。

要检索value,调用get传递适当key(例如 string 'Hello')作为参数的方法。

于 2012-09-16T12:20:44.730 回答
0

在 Java 中,您无法获得指向对象的变量(引用)名称,因为该对象不知道对它的引用,并且可以有多个变量引用同一对象。

另一方面,您可以这样做;但我不知道有什么帮助:

String s = "Hello";
Reference<String> hello = new SoftReference<String>(s);
String myStringAccessedWithHello = hello.get();
于 2012-09-16T12:28:56.197 回答