2013-04-25 72 views
1

有没有人找到一种方法来即时声明变量?即时声明新变量?

我有一些变量,可以是无限的......

val1 
val2 
val3 
val4... 

有没有办法来动态创建这些,像...

for(loop though){ 
    val + '1' = dosomething('1') 
} 

我知道它不会看类似上述的东西,但希望你能得到它的要点。

+0

我对下面两个答案的评论感到困惑,因为地图和列表可以很容易地传递给VF页面......你能详细说明一下你的用例,它会阻止你使用它吗? – JCD 2013-04-26 03:06:31

回答

1

这在apex中是不可能的。但是,您可以使用以下列表:

List<String> values = new List<String>(); 

for (Integer i = 0; i < aList.size(); i++) { 
    values.add(dosomething(i)); 
} 
+0

谢谢Jeremy,这是一个很好的解决方法,但它不会在我的情况下工作,因为我需要将值传递到Visualforce页面。非常感谢 – c14kaa 2013-04-25 21:53:19

+0

Visualforce页面仍然可以接受像Jeremy的'List'或eyescream的'Map'这样的集合类。 – ryanbrainard 2013-04-26 17:55:48

1

Apex是一种编译的,未分析/动态语言。你可以用Javascript或PHP来解决这个问题,但是(据我所知)而不是用Java。当它到底时--Salesforce建立在Oracle数据库和Java基础之上,因此Apex对他们认为最有必要的Java调用是一种简单的包装。

出于好奇 - 你为什么需要这个?

如果您需要顺序访问,请使用Jeremy的循环思路。或...

如果您需要“唯一键 - >某个值”,请使用地图。

Map<String, Double> myMap = new Map<String, Double>(); 
for(Integer i = 1; i < 10; ++i){ 
    myMap.put('someKey' + String.valueOf(i),Math.floor(Math.random() * 1000)); 
} 
System.debug(myMap); 
System.debug(myMap.get('someKey7')); 

本例中的“双重”可能同样整数,身份证,户口,MyCustomClass ......无论你的函数返回。

还有一个我可以想到的技巧,如果您的数据来自外部来源,这可能会有帮助。这是使用JSON/XML解析器,可以将任何类型的数据(保存在字符串中)转换为您选择的集合。它可以追溯到List/Map的想法,但完全取决于您如何预先构建/检索此字符串。请阅读JSON methods作为开始,但如果您没有遵循可预测模式的结构,则可能需要查看JSON/XML解析器(click here并向下滚动到示例)。

+0

Hreat info,你的工作相当出色,我会记住这个方法。然而,它不适用于我的情况,因为变量需要传递到Visualforce页面,所以我仍然需要创建变量。但我相信别人会发现这非常有趣,非常感激。 – c14kaa 2013-04-25 21:48:20

+0

地图/列表也可以在Visualforce中使用,'{!myMap ['someKey1']}'。 http://www.salesforce.com/us/developer/docs/pages/Content/pages_dynamic_vf_maps_lists.htm。只要记住1000个项目的限制(如果您的页面有'readOnly = true',则为10 000个)。 – eyescream 2013-04-26 06:28:48