2010-12-29 19 views
24

ほとんどの時間はPythonでプログラミングしていますので、この問題へのアプローチが短期間であれば私を許してください:JavaのPython風のデコレータ?

ログイン資格情報を必要とするクラスのメソッドが必要です。単純に、各メソッドはクラス変数userが設定されているかどうかをチェックし、そうであれば続行しますが、そうでなければ "ログインする必要があります"というメッセージを吐き出します。

Pythonでは、私はこれを行うデコレータを書くだけです。できるだけ少ない冗長コードでJavaで同じことをどのように達成できますか?

ありがとうございます!

+1

また、この質問の答えを見てみることもできます:http://stackoverflow.com/questions/2541554/java-method-missing-ala-ruby-for-Decorating –

答えて

12

Javaでこれを解決する方法の1つは、Aspect-oriented programmingツールを使用することです。そのようなツールの1つはAspectJです。このタイプの問題は、AOPの動機付けによく使用される例であることがわかります。

AOPはこの特定の問題を解決するにはかなり重い方法かもしれないので、それぞれの方法に適切なチェックを追加するだけでよいでしょう。ネイティブJavaにPythonのデコレータと直接的に同等のものはありません。

+0

答えをありがとう。私はこのような他の多くの問題があるので、あまりにも 'ヘビー級'ではないかもしれません。私はAspectJとGuiceを見ていきます。 – awegawef

8

最も簡単なことは、 "assertCredentials"のようなメソッドを記述し、そのメソッドを資格情報を必要とするすべてのメソッドの先頭に呼び出すことです。資格情報が設定されていない場合、メソッドは親メソッドを中止する例外をスローする必要があります。

Javaにはメソッドなどを装飾するために使用できるアノテーションがありますが、この場合アノテーションを使用すると物を簡略化することはできません。

-2

bean validation frameworkをご覧ください。

+0

私は豆の検証が役立つとは思わない。 1)他のメソッドは信用証明書を必要としないので、信用証明書なしのオブジェクトを「無効」として扱うことはできません。 2)検証フレームワークは、オブジェクトが常に有効であることを保証するものではありません。あなたは "validate"メソッドを呼び出さなければなりません... –

6

Google Guice AOPは、AspectJのようなAOPフレームワークよりも比較的軽量です。

関連する問題