何时在Salesforce中将方法声明为静态

时间:2013-03-21 14:57:51

标签: methods static salesforce

我想知道将方法声明为静态有什么含义。我知道当声明为静态时,我可以使用该方法而无需实例化该类。但是什么时候我应该将方法声明为静态,以及当我将方法声明为静态时会产生什么影响。

提前感谢您对此主题的任何帮助/澄清。

1 个答案:

答案 0 :(得分:3)

在Salesforce的Apex中使用静态方法的原因与Java或其他相关的面向对象语言相同。简而言之,当方法应用于类而不是该类的实例时,请使用static。例如,我将引用从not-just-yeti到问题Java: when to use static methods的回答:

  

在课程Car中,你可能有一个方法double convertMpgToKpl(double mpg),它会是静态的,因为有人可能想知道35mpg是什么   转换成,即使没有人建造过汽车。但无效   setMileage(double mpg)(设定一个特定的效率   Car)不能是静态的,因为调用该方法是不可思议的   在任何Car构建之前。

有关更多示例,请参阅: Java: when to use static methods

<强>更新 我意识到如果你从Salesforce开始编程和OO设计,上面的这个例子可能有点抽象,所以让我重新用built-in Apex TimeZone class中的一个例子来表达:

这门课程,正如您所期望的那样,代表着世界各地的时区。此类的实例(即TimeZone个对象)表示各个命名的时区(例如EST,CST,PST等)。注意这里的区别 - 定义了一般的时区(例如,地球的定义区域,具有特定小时数的时间偏移),但是实例类(即对象)定义了一个特定的时区。例如,PST的实例将包含自己的数据,例如displayName = "Pacific Standard Time"offset = -8,您可以通过其实例方法getDisplayName()getOffset()访问这些数据, 分别。另一方面,如果您想获得有关时区的信息,则可以在static类上使用TimeZone方法。例如,Apex在static类上定义了一个名为getTimeZone()的{​​{1}}方法,您可以使用该方法按ID查找TimeZone实例。要将它们放在一起,请考虑此示例以获取PST的显示名称:

TimeZone

注意第一行是如何获得TimeZone pst = TimeZone.getTimeZone('PST'); // static method call String pstName = pst.getDisplayName(); // instance method call 的实例,其中包含有关PST的特定信息,然后第二行实际上是获取该信息。

希望这可以解决问题并且不会让它更加混乱。总而言之,如果您正在访问数据或对某个特定数据实例执行某些操作,无论是汽车还是时区,您都需要使用实例方法。另一方面,如果您正在访问数据或对整个类别的数据执行某些操作,无论是汽车还是时区,您都需要使用TimeZone方法。