5

メソッドを呼び出すいくつかの方法を使用してきました。最近では、クラスの静的インスタンスを使用していますが、それが適切な用語だと思います (間違っている場合は修正してください)。どちらが優れているか (またはアイデアを提案するか)、その理由は?

最初の方法は、単純な古い静的メソッドでした。

static void exampleMethod1(){}
static void exampleMethod2(){}

2番目の方法(これは改善だと誰かが言った)。

public class ExampleClass{

    public static ExampleClass instance;

    public ExampleClass(){
    instance = this;
    }

    public static ExampleClass getInstance(){
        return instance;
    }

    void exampleMethod1(){
        //code
    }

    void exampleMethod2(){
        //code
    } 

    // To call the method I simply getInstance().exampleMethod1    

}
4

4 に答える 4

6

あなたが探している用語はsingletonです。

シングルトンの静的メソッドとインスタンス メソッドはどちらも問題ありませんが、静的メソッドのアプローチではインターフェイスを実装できないことに注意してください。インターフェイスを実装する必要がある場合は、シングルトンを使用してください。

例えば:

public enum HelloWorld implements Runnable {
    INSTANCE;

    @Override
    public void run() {
        System.out.println("Hello, world!");
    }
}

// ...
new Thread(HelloWorld.INSTANCE).start();

Runnablehello-world コードが静的メソッドにある場合、インターフェイスを直接実装することはできませんでした。

于 2013-08-22T18:07:33.897 に答える
1

静的メソッドのみを持つクラスを持つことができ、メソッドは (必要に応じて) 永続データ用にクラス内の静的フィールドを使用できます。または、「シングルトン」クラス インスタンスを使用して、インスタンス メソッドとインスタンス フィールドでほぼ同じことを行うことができます。

一般に、状態を持たないメソッドのみで構成されるクラス (Math クラスなど) がある場合は、メソッドを静的にし、インスタンスを持たない/許可しないようにする必要があります。ただし、メソッドに何らかの共有状態が必要な場合は、ある種の「シングルトン」実装を使用する方がおそらく賢明です。

于 2013-08-22T18:18:37.233 に答える
1

適切なシングルトンを作成するには、コンストラクターをプライベートにする必要があります。static final 宣言により、クラスが最初にロードされたときにインスタンスが初期化されることが保証されます。これは Java でシングルトンを作成する最も簡単な方法ですが、他にも方法があることに注意してください。

public class ExampleClass
{
    private final static ExampleClass instance = new ExampleClass();

    private ExampleClass()
    {
        // prevents instantiation
    }

    public static ExampleClass getInstance()
    {
        return instance;
    }

    void exampleMethod1()
    {
        //code
    }

    void exampleMethod2()
    {
        //code
    }     
}

クラスのインスタンスを取得するには:

ExampleClass exampleClass = ExampleClass.getInstance();
exampleClass.exampleMethod1();
于 2013-08-22T18:32:24.763 に答える