2012-10-11 56 views
0

嗨我有一个关于java的奇怪问题。我将忽略背景信息以免复杂化。如果你有一个名为fname的变量。并说你有一个函数返回一个字符串是“fname”。有没有办法通过字符串“fname”来引用标识符fname。这个想法就像“fname”.toIdentifier()= value,但很明显toIdentifier不是一个真正的方法。你可以从字符串引用一个java变量吗?

我想有点背景螨帮助。基本上我有一个字符串“fname”映射到另一个字符串“fname的值”。我想要一种方法快速地从地图上说出变量fname =键“fname”的值。我通过在表单中​​迭代cookie映射来获取关键值对。我不想做“如果key =”fname“将fname设置为”fname的值“,因为我需要设置大量变量,我宁愿做类似currentkey.toIdentifer = thevalue 。奇怪的问题,也许我俯瞰一个更简单的方法来处理这个。

+0

[yes is possible](http://stackoverflow.com/questions/6629995/test-if-a-class-contains-an-instance-variable-based-on-its-name),但它的测试,有几个好的方法,这个问题谈论错误的设计 – mKorbel

+0

看来你只是想要一个地图:http://docs.oracle.com/javase/6/docs/api/java/util/Map.html _OR_你可能想看看反射......你或许想考虑一下你的设计。 – jahroy

+0

我同意设计可能有缺陷,但我从来没有想过要做那样的事情。 – Yoshi

回答

1

在你所描述的是什么反思的方式用于:

您可以按名称引用对象的字段和方法

然而,大多数时候,当人们问这样的问题,他们是更好的重新工作的设计和考虑,例如地图数据结构的优势,解决他们的问题。


下面是一些代码,显示了如何从两个数组创建Map

String[] keyArray = { "one", "two", "three" }; 
String[] valArray = { "foo", "bar", "bazzz" }; 

// create a new HashMap that maps Strings to Strings 

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

// create a map from the two arrays above 

for (int i = 0; i < keyArray.length; i++) { 
    String theKey = keyArray[i]; 
    String theVal = valArray[i]; 
    exampleMap.put(theKey, theVal); 
} 

// print the contents of our new map 

for (String loopKey : exampleMap.keySet()) { 
    String loopVal = exampleMap.get(loopKey); 
    System.out.println(loopKey + ": " + loopVal); 
} 

这里给JavaDoc for Map的链接。

2

你为什么不只是用这个简单的HashMap?

Map<String, String> mapping = new HashMap<String, String>(); 
mapping.put("fname", "someValue"); 
... 

String value = mapping.get(key); //key could be "fname" 
+0

我很感谢你的回答。我目前正在使用hashmap。我想我应该使用contains(),然后设置fname,而不是迭代整个地图,因为我知道我期待的cookie。但是,我会接受这一点。谢谢你的迅速回复!我想我准备在现实中有很多很多的饼干,这可能是非常不寻常的。更好的主意是一个cookie,并根据用户名cookie从数据库中提取其余信息。 – Yoshi

+0

Map有一个名为_containsKey_的方法:http://docs.oracle.com/javase/6/docs/api/java/util/Map.html#containsKey%28java.lang.Object%29 – jahroy

相关问题