1

特定のパッケージ内のクラスのすべてのゲッターが特定のテンプレートに従っていることを確認したいと考えています。

たとえば、すべてのゲッターは次の形式である必要があります。

XXX getYYY(){
    classLock.lock(); 
    return YYY;
    finally{
        classLock.unlock(); 
    }
}

基本的に、すべてのゲッターがその形式でない限り、プロジェクトがコンパイル/実行されないようにしたいと考えています。

それを行う最善の方法は何ですか?Eclipse プラグインとして使用できるソリューションを希望します。

4

4 に答える 4

6

AspectJ (またはその他のアスペクト指向フレームワーク) を使用して、コンパイル段階でゲッターを自動的にラップしてみませんか? ラップするメソッドのタイプを (たとえば、特定のクラスのセットで) 指定し、事前/事後実行を提供するコードを指定するだけです。

于 2010-04-12T14:26:01.830 に答える
5

コンパイラにそのチェックを強制する方法はありません。PMDCheckStyleなどの静的コード分析ツールを調べて、独自のルールを定義することをお勧めします。

次に、ビルド サイクル中にそのツールを呼び出し、そのチェックがいずれかのクラスで失敗した場合は致命的なエラーにします。

しかし、そのようなゲッターがコードに任意のレベルのスレッド セーフを提供するかどうかはわかりません。2 つの getter を続けて呼び出すと、一貫性のない値を読み取ることができます。

于 2010-04-12T13:42:52.423 に答える
0

+1 Brians の提案については、OR ランタイムで Spring AOP などの同様のものを使用します。ランタイム フレームワークを使用すると、別のコンパイラを必要とせず、コンテキスト ファイルから 1 行を削除するだけですべてのメソッドからラッピングを削除できるという利点があります。

于 2010-04-12T14:37:18.910 に答える
0

この目的のために Eclipse プラグインを作成できます。

Builders (コンパイラーのようなプラグイン) 用の API があり、Eclipse Java コンパイラーの AST (Abstract Syntax Tree) にアクセスしてチェックを実行できます。

Eclipse プラグインが好きなら、大したことではないはずです。

AST
に関する記事 Builderに関する記事

于 2010-04-12T14:09:26.443 に答える