2011-08-01 24 views
0

私は例えば、いくつかの静的な無効メソッドを持つクラスがあるとします。私はこのように私の静的メソッドを呼び出すためにそれを修正することができる方法再利用クラスの静的メソッドを呼び出した後

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

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

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

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

答えて

8

さて、あなたはこれを行うことができます:あなたのコードがコンパイルされますその時点で

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

、Javaが参照する「経由」静的メソッドにアクセスすることができますよう。コンパイラは、唯一の呼び出すためにどのdoSmthElse()方法うまくするために、発現MyClass.doJob()コンパイル時の型を見ていきますので、あなたがnullを返しているという事実は、無関係です。戻り値をまったく調べずに静的メソッドが呼び出されます。

しかし、これを実行しないでください - それは実際には別のやっているとき、それは一つのことをやっているようなあなたのコードに見えるとして、それは、本当に厄介なコードのにおいです。

オプション:

  • ちょうどそれらがインスタンスメソッドであるために、それは理にかなっているクラスに静的メソッドを抽出
  • あなたの、より詳細な通話と一緒に暮らす(これは同様にもテスト容易性などを改善する場合があります)
  • 静的
  • は三つの方法次々呼び出しMyClassが大きいメソッドを作成する方法をインポートします。
+2

1に

return getInstance(); 

を行うことができます - 特に "それをしない" ため。しかし、doSmthElseの署名を変更するのを忘れました。 –

+0

@Don:あなたのコメントを投稿する直前にやったよ:) –

0

あなたが返すことができるオブジェクトがないので、それはimmpossibleです。

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; 
    } 

} 
1

あなたは、このクラスのシングルトンを作成し、あらゆる方法

関連する問題