有没有人找到一种方法来即时声明变量?即时声明新变量?
我有一些变量,可以是无限的......
val1
val2
val3
val4...
有没有办法来动态创建这些,像...
for(loop though){
val + '1' = dosomething('1')
}
我知道它不会看类似上述的东西,但希望你能得到它的要点。
有没有人找到一种方法来即时声明变量?即时声明新变量?
我有一些变量,可以是无限的......
val1
val2
val3
val4...
有没有办法来动态创建这些,像...
for(loop though){
val + '1' = dosomething('1')
}
我知道它不会看类似上述的东西,但希望你能得到它的要点。
这在apex中是不可能的。但是,您可以使用以下列表:
List<String> values = new List<String>();
for (Integer i = 0; i < aList.size(); i++) {
values.add(dosomething(i));
}
谢谢Jeremy,这是一个很好的解决方法,但它不会在我的情况下工作,因为我需要将值传递到Visualforce页面。非常感谢 – c14kaa 2013-04-25 21:53:19
Visualforce页面仍然可以接受像Jeremy的'List'或eyescream的'Map'这样的集合类。 – ryanbrainard 2013-04-26 17:55:48
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并向下滚动到示例)。
Hreat info,你的工作相当出色,我会记住这个方法。然而,它不适用于我的情况,因为变量需要传递到Visualforce页面,所以我仍然需要创建变量。但我相信别人会发现这非常有趣,非常感激。 – c14kaa 2013-04-25 21:48:20
地图/列表也可以在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
我对下面两个答案的评论感到困惑,因为地图和列表可以很容易地传递给VF页面......你能详细说明一下你的用例,它会阻止你使用它吗? – JCD 2013-04-26 03:06:31