2

我想知道将方法声明为静态的含义是什么。我知道当声明为静态时,我可以在不实例化类的情况下使用该方法。但是我什么时候应该将一个方法声明为静态的,以及当我将一个方法声明为静态时的含义是什么。

在此先感谢您提供有关此主题的任何帮助/说明。

4

1 回答 1

4

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

在一个类Car中,您可能有一个convertMpgToKpl(double mpg)静态方法 double,因为即使没有人建造过 Car,也可能想知道 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

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

希望这可以解决问题并且不会使其更加混乱。总而言之,如果您正在访问数据或对特定数据实例做某事,无论是汽车还是时区,您都需要使用实例方法。另一方面,如果您正在访问数据或对一整类数据做某事,无论是汽车还是时区,您都需要使用一种static方法。

于 2013-03-23T17:07:20.000 回答