Java 不确定这段代码是如何完成其功能的。getdescripe()

Java 不确定这段代码是如何完成其功能的。getdescripe(),java,salesforce,apex,Java,Salesforce,Apex,我对Apex和Java比较陌生 有人能解释一下这段代码吗 Map<String, SObjectField> m = Opportunity.SObjectType.getDescribe().fields.getMap(); for (String name : m.keySet()) { DescribeFieldResult r = m.get(name).getDescribe(); System.debug(r); } Map m=Opportunity.

我对Apex和Java比较陌生

有人能解释一下这段代码吗

Map<String, SObjectField> m = Opportunity.SObjectType.getDescribe().fields.getMap();
for (String name : m.keySet()) {
    DescribeFieldResult r = m.get(name).getDescribe();
    System.debug(r);
}
Map m=Opportunity.SObjectType.getDescripte().fields.getMap();
for(字符串名称:m.keySet()){
DescribeFieldResult r=m.get(name).getDescribe();
系统调试(r);
}
我知道它正在获取Opportunity对象上每个字段的描述信息,但是有人能逐行解释一下它是如何做到的吗


干杯

当您需要枚举映射时,这是最基本的:

  • 第1行获取映射,并将其存储在变量
    m
  • 第2行迭代映射的键
    m
    ,使用
    name
    变量作为该迭代中键的值
  • 第3行使用键的
    name
    从映射
    m
    中获取项目,并调用
    getdescripe
  • 第4行将结果传递给
    System.debug
  • 第5行结束循环
但是,这不是迭代值的最佳方法:更简单的方法如下:

Map<String, SObjectField> m = Opportunity.SObjectType.getDescribe().fields.getMap();
for (SObjectField val : m.values()) {
    System.debug(val.getDescribe());
}

迭代键,然后在单独调用
get
中检索值,这样做效率很低。

非常感谢dasblinkenlight给出的答案,但我发现m.valueSet()有一个错误<代码>方法不存在或签名不正确:[MAP].valueSet()知道是什么原因造成的吗?@Daft,因为我键入了一个错误的名称:)它应该是
values()
,而不是
valueSet()
。如果这是Apex而不是Java,那么Salesforce映射没有entrySet()方法。这是Java还是Apex?它们有相似的语法,但它们是不同的语言。
Map<String, SObjectField> m = Opportunity.SObjectType.getDescribe().fields.getMap();
for (Map.Entry<String,SObjectField> e : m.entrySet()) {
    // e.getKey() produces the key
    // e.getValue() produces its associated value
}