我想知道将方法声明为静态有什么含义。我知道当声明为静态时,我可以使用该方法而无需实例化该类。但是什么时候我应该将方法声明为静态,以及当我将方法声明为静态时会产生什么影响。
提前感谢您对此主题的任何帮助/澄清。
答案 0 :(得分:3)
在Salesforce的Apex中使用静态方法的原因与Java或其他相关的面向对象语言相同。简而言之,当方法应用于类而不是该类的实例时,请使用static
。例如,我将引用从not-just-yeti到问题Java: when to use static methods的回答:
在课程
Car
中,你可能有一个方法doubleconvertMpgToKpl(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
方法。