2012-09-16 309 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"); 

這是我怎麼會用一個簡單的字符串值,以找到一個笨拙的字符串值。請記住,您還可以使用將字符串值映射到任何其他類型的對象的映射。

相關問題