2016-05-05 6 views
0

私は現在大きなコードベースで作業していますが、私はその上でいくつかのリファクタリングを行っています。シングルトンクラスで静的メソッドを使用するのは良い方法ですか?

私が働いてメインクラスがシングルトンクラスAであり、そして例えばクラスB

から静的メソッドに依存しているいくつかの方法がある:

public class A{ 

    public static A getInstance() {}; 

    method1() { 
     B.dosomething1(); 
    } 

    method2() { 
     dosomething2(); 
    } 
} 

法1は、その後に依存静的メソッドであり、method2は静的メソッドではありません。

私は法1を使用する必要がある場合、書くための良い方法です:

A.getInstance().method1(); 

またはそれが静的としてmethod1を宣言し、呼び出すために良いです:

A.method1(); 

および他のすべてのために非静的メソッド、A.getInstance().method2()

ありがとうございました。

+0

シングルトンやスタティックを全く使わないことが良いのは –

答えて

1

私は、インスタンスコンテキストコードから静的コンテキストコードを分離します。あなたの特定のケースでは、両方の方法が静的であると正しいと思います。

public class A { 
    public static void method1(){ 
     B.doSomething(); 
    } 
    public static void method2(){ 
     doMoreThings(); 
     //Incorrect: object.doSomething(); 
    } 
} 
+0

だから、彼は 'A' *静的なネストクラス* - [Javaの静的クラス]を作ることを提案している(http://stackoverflow.com/a/ 7486111/1241334)? - あなたのメソッドは静的ではありません。 –

+0

同じ場所からアクセスする2つのメソッドしかない場合、ネストされたクラスは意味をなさないと思います。彼が別の場所から 'A.method1()'と 'A.method2()'を使う必要があるかどうか考えてみましょう。 –

+0

Javaにはトップレベルの静的クラスはなく、ネストされた静的クラスのみが存在します。だから、あなたのコメントはあなたの答えに反する。 –

1

シングルトンは、必要な場合にのみ使用してください。つまり、静的メソッドはクラス読み込み時にメモリにロードされ、さらにBに依存します。したがって、私によれば静的メソッドをマークしないでください。静的メソッドの数が増えると、クラスローディング時に静的なものに相当な量のメモリーが割り当てられるため、必要な場合にのみメソッドを静的にする必要があります。

関連する問題