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

hli*_*022 2 methods static salesforce

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

预先感谢您对此主题的任何帮助/说明。

rya*_*ard 5

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

在一个类中,Car您可能有一个静态方法 double convertMpgToKpl(double mpg),因为人们可能想知道 35mpg 转换成什么,即使没有人曾经制造过汽车。但是 void setMileage(double mpg)(设置一个特定的效率 Car)不能是静态的,因为在Car构造任何方法之前调用该方法是不可想象的。

有关更多示例,请参阅: Java:何时使用静态方法

更新:我意识到如果您要从 Salesforce 进行编程和 OO 设计,上面的示例可能有点抽象,所以让我用内置 ApexTimeZone 中的示例重新表述一下:

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

TimeZone pst   = TimeZone.getTimeZone('PST');  // static method call
String pstName = pst.getDisplayName();         // instance method call
Run Code Online (Sandbox Code Playgroud)

请注意第一行如何获取 a 的实例TimeZone,其中包含有关 PST 的特定信息,然后第二行实际上获取该信息。

希望这能澄清事情并且不会让事情变得更加混乱。总而言之,如果您正在访问数据或对特定数据实例执行某些操作,无论是汽车还是时区,您都将需要使用实例方法。另一方面,如果您正在访问数据或对整个数据类执行某些操作,无论是汽车还是时区,您将需要使用一种static方法。