【问题标题】:Declaring new variables on the fly?动态声明新变量?
【发布时间】:2013-04-25 16:46:58
【问题描述】:

有没有人找到动态声明变量的方法?

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

val1
val2
val3
val4...

有没有办法即时创建这些,比如...

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

我知道它看起来不会像上面那样,但希望你能明白它的要点。

【问题讨论】:

  • 我对以下两个答案的 cmets 感到困惑,因为地图和列表可以轻松传递到 VF 页面...您能否详细说明会阻止您使用它们的用例?

标签: salesforce apex-code visualforce force.com


【解决方案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'));

本例中的“double”可以同样是 Integer、Id、Account、MyCustomClass...无论您的函数返回什么。

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

【讨论】:

  • 威胁信息,你的工作非常出色,我会记住这个方法。但是它不适用于我的情况,因为需要将变量传递到 visualforce 页面,所以我仍然需要创建变量。但我相信其他人会觉得这很有趣,非常感谢。
  • 地图/列表也可以在 Visualforce 中使用,{!myMap['someKey1']}salesforce.com/us/developer/docs/pages/Content/…。请记住 1000 个项目的限制(如果您的页面有 readOnly=true,则为 10 000 个)。
【解决方案2】:

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

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

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

【讨论】:

  • 感谢 Jeremy,这是一个很好的解决方法,但它不适用于我的情况,因为我需要将值传递给 visualforce 页面。非常感谢
  • Visualforce 页面仍然可以接受 Jeremy 的 List 或 eyecream 的 Map 等集合类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 2014-12-31
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多