3

JavaのUtilクラスは2つの方法で作成できます

class Utils  
{   
  public static ReturnType someUtilMethod(  
 // ...   
}    

そして、utilメソッドを実行します

Utils.someUtilMethod(...);

または私は作ることができます

class Utils  
{  
  public Utils(){}     
  public ReturnType someUtilMethod(  
 // ...   
}  

そして、utilメソッドを実行します

new Utils().someUtilMethod(...)  

どのような方法が良いですか?この方法の間にいくつかの違いはありますか?

4

5 に答える 5

11

通常、Util クラスには、処理するオブジェクトの状態を保存する必要がない Utility メソッドが含まれているため、staticメソッドはそこに適しています

于 2012-07-16T11:17:13.573 に答える
2

ユーティリティ関数は、何らかの理由で他の変数の状態staticに依存しない限り、常に である必要があり、呼び出し間でそれらの変数を記憶する必要があります。

後者はほとんど発生しないはずですが、疑似乱数ジェネレーターのようなものが良いケースかもしれません。

Math関数はユーティリティ関数の良い例です。結果を呼び出すと、指定されたパラメーターのみMath.sin()に依存します。関連する「状態」がないため、オブジェクトを作成する必要はありません。

于 2012-07-16T11:19:35.547 に答える
1

静的アクセスは、オブジェクトの属性に関係のない Util クラスのホールド メソッドのように、より良いアプローチになります。

別の例はMath Classです。

  • Math クラスにはインスタンス変数がありません

  • プライベートコンストラクターがあるため、オブジェクトを作成できません。

  • したがって、Math クラスの場合、Math.PI のような静的アクセスを使用するのが適切です。

于 2012-07-16T11:20:28.343 に答える
0

静的メソッドのみを持つクラスを使用する場合、使用する必要があるたびにオブジェクトをインスタンス化する必要がないため、コード行とメモリを節約できます。デフォルトのコンストラクターを非公開にすることを忘れないでください。

于 2012-07-16T11:20:23.597 に答える
0

ユーティリティ クラスは、Java でグローバル関数を構文的に保持する場所にすぎません。

2番目の例は、「ユーティリティクラス」という用語ではカバーされていません。その概念の定義には、クラスのインスタンス化不可能性が含まれます。

インスタンス メソッドを使用する理由は、(ポリモーフィズムを達成するための) 動的メソッド ディスパッチであるか、非グローバル状態を保持する可能性があります。しかし、私が言ったように、「ユーティリティ クラス」という用語の範囲外になります。

于 2012-07-16T11:20:34.953 に答える