0

たとえば、いくつかの static void メソッドを持つクラスがあるとします。

class MyClass {
    public static void doJob() {
        // ...
    }
    public static void doSmthElse() {
         // ...
    }
}

次のように静的メソッドを呼び出すように変更するにはどうすればよいですか。

MyClass.doJob().doSmthElse().doJob();

それ以外の

MyClass.doJob();
MyClass.doSmthElse();
MyClass.doJob();

非静的メソッドでそれを行う方法は知っていますが (これを返すだけです)、静的フィールドでそれを行う方法は?

4

4 に答える 4

8

さて、あなたはこれを行うことができます:

// Horrible, don't do it!
class MyClass {
    public static MyClass doJob() {
        // ...
        return null;
    }
    public static MyClass doSmthElse() {
        // ...
        return null;
    }
}

その時点で、コードがコンパイルされます。Java では参照を「介して」静的メソッドにアクセスできるためです。null を返すという事実は関係ありません。コンパイラは、どのメソッドを呼び出すかを判断するために、式のコンパイル時の型のみを調べるためです。静的メソッドは、戻り値をまったく調べずに呼び出されます。MyClass.doJob()doSmthElse()

しかし、これはしないでください。あなたのコードは、実際には別のことをしているのに、あることをしているように見えるので、本当に厄介なコード臭です。

オプション:

  • より冗長な呼び出しに対処するだけです
  • 静的メソッドを、インスタンス メソッドであることが理にかなっているクラスに抽出します (これにより、テスト容易性なども向上する可能性があります)。
  • メソッドを静的にインポートする
  • MyClass3 つのメソッドを次々と呼び出す、より大きなメソッドを作成します。
于 2011-08-01T11:05:07.557 に答える
1

クラスのダミーインスタンスを作成して返すことができますthis。クラスの静的メンバーを使用しますが、通常のインスタンスへの参照を返します (楽しみのため、コード スタイルのため)。しかし、私はこのアプローチを使用したくありません。

class MyClass {

    private static int data = 0;
    private static MyClass link = null;

    public static void doJob() {
        // do job with static data such as "data"
        return checkMe();
    }

    public static void doSmthElse() {
        // do someting else with static data such as "data"
        return checkMe();
    }

    private MyClass static void checkMe() {
        if (link == null) link = new MyClass();
        return link;
    }

}
于 2011-08-01T11:06:00.580 に答える
1

このクラスをシングルトンにして実行できます

return getInstance();

あらゆる方法で

于 2011-08-01T11:06:58.247 に答える
0

返せる物がないので無理です。

于 2011-08-01T11:04:04.637 に答える