2015-06-12 79 views
3

我具有註釋爲:Compell與特定的註釋的方法以具有特定參數/簽名

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation { 
    String annotationArgument1() default ""; 
    String annotationArgument2(); 
} 

我有兩個類如:

class MyClass1 { 
    @MyAnnotation(annotationArgument1="ABC", annotationArgument2="XYZ") 
    public void method1(MyClass2 object) { 
     //do something 
    } 

    @MyAnnotation(annotationArgument1="MNO", annotationArgument2="PQR") 
    public void method2(MyClass2 object) { 
     //do something 
    } 
} 

class MyClass2 { 
    int num; 
} 

我想method1method2(或任何其它方法在@MyAnnotation註解的任何其他類中)僅採用一個參數作爲MyClass2,因爲它們注有@MyAnnotation。如果傳遞了其他參數,它必須給出編譯時錯誤。

實際上可以做到這一點嗎? 如果是的話,如何做到這一點,如果沒有,那麼可以做出這種行爲的替代方案是什麼?

回答

2

AFAIK,您可以使用annotation processor在編譯時檢查方法簽名。

我建議:

  • 考慮AbstractProcessor作爲基類
  • 考慮使用所述註釋提供由javax.annotation.processing
  • 註冊處理器如在service META-INF /服務
  • 將註釋處理器和註釋打包在同一個jar中 - 將註冊作爲服務一起使用,這將使處理器在您的自定義註釋處理器被使用時
+0

我會詳細看看第一個選項,研究它,看看對我來說這是否可能,因爲我不知道這種方法。但我不明白第二種方法。你能把它和我的例子聯繫起來嗎? – Mukund

+0

@Mukund我想我誤解了你的問題。我將刪除第二種方法。第一個應該工作。 – Puce

相關問題