我想知道将方法声明为静态的含义是什么。我知道当声明为静态时,我可以在不实例化类的情况下使用该方法。但是我什么时候应该将一个方法声明为静态的,以及当我将一个方法声明为静态时的含义是什么。
在此先感谢您提供有关此主题的任何帮助/说明。
我想知道将方法声明为静态的含义是什么。我知道当声明为静态时,我可以在不实例化类的情况下使用该方法。但是我什么时候应该将一个方法声明为静态的,以及当我将一个方法声明为静态时的含义是什么。
在此先感谢您提供有关此主题的任何帮助/说明。
在 Salesforce 的 Apex 中使用静态方法的原因与 Java 或其他相关的面向对象语言相同。简而言之,static
当方法适用于类而不是该类的实例时使用。例如,我将参考not-just-yeti对Java: when to use static methods的回答:
在一个类
Car
中,您可能有一个convertMpgToKpl(double mpg)
静态方法 double,因为即使没有人建造过 Car,也可能想知道 35mpg 转换为什么。但是 voidsetMileage(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()
TimeZone
TimeZone
TimeZone pst = TimeZone.getTimeZone('PST'); // static method call
String pstName = pst.getDisplayName(); // instance method call
请注意第一行是如何获取 a 的实例,该实例TimeZone
具有有关 PST 的特定信息,然后第二行实际上是获取该信息。
希望这可以解决问题并且不会使其更加混乱。总而言之,如果您正在访问数据或对特定数据实例做某事,无论是汽车还是时区,您都需要使用实例方法。另一方面,如果您正在访问数据或对一整类数据做某事,无论是汽车还是时区,您都需要使用一种static
方法。