方法

2021-02-02 11:51

中块的用法最近我在一些类中看到了一些东西例如:@IsTestprivate staticvoid myTest(){String a;{String b=quot;;}{String b=quot;;}}}我很震惊,因为我

解答动态

  • 在Apex和其他许多C和Java家族语言中,花括号定义了作用域:变量绑定存在的边界。quot;Somethingquot;Something";;} 这两个作用域总是执行,

    • 为了扩展@davidered的答案,应该注意(在Apex和许多其他语言中)在块中定义的变量,不管它是方法、条件、迭代,初始值设定项或无保护块(这是因为您的代码段在方法中包含这些块而拥有的块的类型)超出范围,并且在该块终止后无法被引用。
      但是,有一种情况在Apex中不是这样的。您可以在块中声明一个变量,并在稍后的代码流中引用它,在块外部,作为动态SOQL(我相信还有动态SOSL)中的绑定,这个奇怪的代码实际上可以工作(假设您有一个名为SomeObject\uu c的自定义对象和一个名为SomeField\uu c的类似字符串的字段):
      if(someExpression){string bindingA='blue harvest';}else{string bindingA='something';}Listgt;对象=数据库.query('SELECT Id From SomeObject_uuc WHERE SomeField_uc=:bindingA'); 有趣的是,这实际上不适用于静态SOQL-它必须是动态的。
      这恰好起作用,因为Apexquot;似乎处理绑定变量的方式。在我看来,上面的代码基本上变成了例如:
      String tmpVar_1;if(someExpression){String bindingA='blue harvest';tmpVar_1=bindingA;}其他{String bindingA='something';tmpVar_1=bindingA;}列表gt;对象=数据库.query('SELECT Id From SomeObject_uc WHERE SomeField_uc=:tmpVar_1'); 编译期间(在每个绑定的包含函数或匿名apex序列的开头声明一个quot;,并对绑定变量的每个赋值进行检测,以向该";添加赋值);临时变量。以前你甚至会在调试日志中看到提到这些“临时变量”。
      现在,我怀疑这是否在任何地方都有记录,这通常不是你应该依赖的东西,但这是一个有趣的边缘案例,它涉及到明显的变量范围泄漏。

      • End

      免责声明:

      本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。