0

私はシングルトンクラスを持っています

public class Singleton {
static Singleton instance;
public static Singleton getInstance() 
{
    if (instance == null) 
    {
        instance = new Singleton();
    }
    return instance;
}

public関数method()がクラスSingleton内で定義されているとします。

シングルトン クラス内でメソッドを呼び出す最良の方法は次のとおりです。

シングルトン。method() - 静的に呼び出すメソッド

また

Singleton.getInstance.method() - メソッドが静的ではない?

4

7 に答える 7

11

シングルトン クラスの場合、使用できるクラスのインスタンスは 1 つだけであり、すべてのバディが同じコピーを持っているため、静的メソッドは使用されません。

そのため、常にインスタンス メソッドを作成して呼び出します。

Singleton.getInstance().method();
于 2014-02-25T10:08:49.427 に答える
2

Singleton パターンを使用する場合:

public class Singleton {
    private static Singleton sInstance;

    public static Singleton getInstance() {
        if (sInstance == null) {
            sInstance = new Singleton();
        }

        return sInstance;
    }

    // Prevent duplicate objects
    private Singleton() {

    }

    public void method() {

    }
}
于 2014-02-25T10:11:26.643 に答える
2

最初に、自分のをプライベートなものとして宣言してConstructor、誰かがそれを呼び出して再初期化するのを防ぐ必要があります。次のように:

private void Singleton(){
    //Initialize your private data
}

次にstatic、次のようにメソッドを直接呼び出します。

Singleton.yourMethod();

3 番目:、次のように呼び出す非静的メソッド:

Singleton.getInstance().yourMethod();

これがクラスの良いですSingleton

于 2014-02-25T10:15:03.163 に答える
2

シングルトン パターンを使用すると、1 つのクラスに存在するインスタンスの量を制御できます。つまり、1 つだけです。ただし、クラス自体は通常のクラスであり、その種類がいくつ存在するかを認識していないため、通常のインスタンス メソッドを使用する必要があります。 .

メソッドを使用staticする場合、存在するクラスのインスタンス数を変更したい場合、ひどい問題に遭遇します。

シングルトンを使用するか、静的メソッドを使用してください。

于 2014-02-25T10:13:44.690 に答える
1

最初のケースでは:

Singleton.method();

メソッドは静的でなければなりません

2 番目のケースでは:

Singleton.getInstance().method();

メソッドは静的ではありません。

したがって、それらは概念的に異なります

于 2014-02-25T10:08:04.830 に答える
0

Here you are having getInstance() as a static method and you have created method as a non-static or instance method.

So for a static method, Class.method_name format can be used, but for an instance method object needs to be created.

It may not be the correct syntax as shown over there:

Singleton.getInstance().method();

Singleton obj = new Singleton();
obj.method();

should be the correct format

于 2017-08-19T22:02:33.107 に答える