2012-09-16 69 views
0

可能重复:
Dynamic Variable Names in Java:如何在另一个变量内创建一个变量?

比方说,我有一个字符串,如下图所示。

String s = "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

1.你为什么想这样做?可能有更好的方法来做你想做的事情...... 2.可以通过反射API来完成,这对于Java初学者来说并不容易掌握。 – assylias

+1

同意@Sayem并投票结束。海报请查看Sayem提供的链接。正如这里和链接中所指出的那样,这不是Java的*方式。如果要将String变量与String相关联,最好使用“Map ”。 –

+0

如何使用反射来完成? Java中没有动态变量。 – Anton

回答

0

这在java中是不可能的。

您唯一能做的就是使用A map接口的实现,例如HashMap。使用put方法,您可以为给定的“名称”“赋值”一个值。名称应该是key,并且必须在地图中是唯一的,就像变量在其范围内具有唯一名称一样。

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

+3

它实际上*在技术上可能与班级领域,尽管不推荐。这类事情在这里一遍又一遍地讨论过。 –

+0

同意,如[Eng.Fouad的帖子](http://stackoverflow.com/a/12446884/1598508)所示。但是大多数情况下,使用基本的java接口都可以实现任何行为当绝对不可避免的时候应该使用反射。 –

3

你试图做的是添加一个间接层。您不能以静态语言(如Java/C/C++/Pascal等)动态访问变量。您可以做的是模拟动态语言使用的动态上下文,例如创建一个包含变量名称和值的映射在这种情况下,你将不得不

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

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

// get a "variable" 
System.out.println(stringVars.get("Hello")); 
0

在Java中,你不能获得其指向自对象的对象变量(参考)名字没有提到它的知识,可以有多个变量闯民宅到同一个对象。

另一方面,你可以做这样的事情;但我不知道怎么会帮助:

String s = "Hello"; 
Reference<String> hello = new SoftReference<String>(s); 
String myStringAccessedWithHello = hello.get(); 
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); 
    } 
} 

OUTPUT:

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

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

0

您可以使用一个接受字符串(如“Hello”)并将其映射到另一个字符串(如“我想这样做,但从访问字符串所以我知道该字符串s =你好” )。像下面这样:

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"); 

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

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

,你可以查找属于长串关键“你好”这样的:

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

这是我怎么会用一个简单的字符串值,以找到一个笨拙的字符串值。请记住,您还可以使用将字符串值映射到任何其他类型的对象的映射。

相关问题