メソッドを静的として宣言することの意味は何だろうと思っていました。静的として宣言すると、クラスをインスタンス化せずにメソッドを使用できることを理解しています。しかし、メソッドを静的として宣言する必要があるのはいつですか。また、メソッドを静的として宣言する場合の影響は何ですか。
このトピックに関するヘルプ/説明を事前に感謝します。
メソッドを静的として宣言することの意味は何だろうと思っていました。静的として宣言すると、クラスをインスタンス化せずにメソッドを使用できることを理解しています。しかし、メソッドを静的として宣言する必要があるのはいつですか。また、メソッドを静的として宣言する場合の影響は何ですか。
このトピックに関するヘルプ/説明を事前に感謝します。
SalesforceのApexで静的メソッドを使用する理由は、Javaまたはその他の関連するオブジェクト指向言語と同じです。つまりstatic
、メソッドがそのクラスのインスタンスではなくクラスに適用される場合に使用します。例として、私は質問Javaへのnot-just-yetiからの答えを参照します:静的メソッドをいつ使用するか:
クラスでは、静的な
Car
メソッドdoubleがある場合convertMpgToKpl(double mpg)
があります。これは、誰も車を作成したことがない場合でも、35mpgが何に変換されるかを知りたい場合があるためです。ただし、voidsetMileage(double mpg)
(特定の1つの効率を設定する )は、構築さCar
れる前にメソッドを呼び出すことは考えられないため、静的にすることはできません。Car
その他の例については、以下を参照してください 。Java:静的メソッドを使用する場合
更新:
Salesforceからプログラミングとオブジェクト指向デザインを行う場合、上記の例は少し抽象的である可能性があることに気づきました。組み込みのApexTimeZone
クラスの例で言い換えます。
このクラスは、おそらくご想像のとおり、世界中のタイムゾーンを表しています。このクラスのインスタンス(つまりTimeZone
オブジェクト)は、個々の名前付きタイムゾーン(EST、CST、PSTなど)を表します。ここでの違いに注意してください-クラスは一般的にタイムゾーンが何であるかを定義します(たとえば、特定の時間数の時間オフセットを持つ地球の定義された領域)が、クラスのインスタンス(つまりオブジェクト)は1つの特定の時間を定義しますゾーン。たとえば、PSTのインスタンスには、displayName = "Pacific Standard Time"
とのようなそれ自体に関するデータが含まれます。これらのデータには、それぞれインスタンスメソッドとをoffset = -8
介してアクセスします。一方、一般的なタイムゾーンに関する情報を取得する場合は、getDisplayName()
getOffset()
static
TimeZone
クラスのメソッド。たとえば、Apexは、IDでインスタンスを検索するために使用できるクラスで呼び出されるstatic
メソッドを定義します。これをまとめるには、次の例を検討してPSTの表示名を取得します。getTimeZone()
TimeZone
TimeZone
TimeZone pst = TimeZone.getTimeZone('PST'); // static method call
String pstName = pst.getDisplayName(); // instance method call
TimeZone
最初の行がPSTに関する特定の情報を持つのインスタンスを取得していて、2番目の行が実際にその情報を取得していることに注目してください。
うまくいけば、これは物事をクリアし、それをより混乱させることはありませんでした。要約すると、データにアクセスしたり、データの特定のインスタンスについて何かをしたりする場合は、それが車であろうとタイムゾーンであろうと、インスタンスメソッドを使用することをお勧めします。一方、データにアクセスしたり、車であれタイムゾーンであれ、データのクラス全体について何かをしている場合は、static
メソッドを使用することをお勧めします。