2017-12-08 5 views
0

メソッド実行があなたのアノテーションに依存するコードを書く必要があります。例:注釈による実行方法の決定

public class Example { 
    private final Integer LAYOUT = 1; 
    public static void main(String... args){ 
     executeMethod1(); 
     executeMethod2(); 
    } 

    @Execute(type = LAYOUT, needs = 1) 
    executeMethod1(){ 
     System.out.println("Layout version 1"); 
    } 

    @Execute(type = LAYOUT, needs = 2) 
    executeMethod1(){ 
     System.out.println("Layout version 2"); 
    } 
} 

、結果がでなければなりません:

たぶん、AOPを使用して
console: Layout version 1 

+0

言語/ライブラリのタグを次回使用します。 – MacStevins

+0

これは、Spring AOPまたはAspectJを使用して簡単に実装できます。あなたは本当に醜い反射を必要としません。あなたの擬似コードから情報が欠落している様子を示す前にもう一度質問してください:この方法で呼ばれるすべてのメソッドは 'void'戻り型を持っていますか、あるいは何か他のものを返すことがあり、呼び出し側が何とか消費します?あなたのサンプルが示唆する、または静的でないメソッドは静的ですか?実行可能にするためにサンプルコードを編集し、あなたがしたいことを実際に表示することをお勧めします。 – kriegaex

答えて

0

これは反映されています。あなたはひどく非効率的な構築物により表示されるように:

void execute(int needs) { 
    for (Method method : Example.class.getDeclaredMethods()) { 
     Execute annotation = method.getAnnotation(Execute.class); 
     if (annotation != null && annotation.type() == LAYOUT 
       && annotation.needs() == needs) { 
      method.invoke(this); 
      return; 
     } 
    } 
} 

他のデザインはthinkableだろうが、私はあまりにも仕事をしなければなりません。

+0

私はこの可能性を考えましたが、私は多くのJavaクラスでこれを使用する必要があるため、AOPを使用したかったのです。 –

+0

私は、Java SPIを使ってコードを生成する注釈プロセッサと考えています。インタフェースに対してexecuteを呼び出し、生成されたコードが適切なメソッドを選択します。アノテーションは完全に静的なので、コード生成に役立ちます。すでに使用されているAOPは、すべてを爪に変えるハンマーです。あまりにも間違っている。 –

関連する問題