2016-04-21 88 views
0

我想創建自己的註釋來初始化類字段。我需要這樣的事情:使用註釋初始化變量

public class MyAnnotationClass{ 
    Map<String,String> myMap; 

    public String getValue(String key) { 
     return myMap.get(key); 
    } 
} 

@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation { 
    String[] keys default {}; 
    String[] vlaues default {}; 
} 

public class MyClass implements MyInterface { 
    @MyAnnotation(keys={"a","b"},values={"A","B"}) 
    MyAnnotationClass myAnnotationClass; 

    public MyAnnotationClass getMyAnnotationClass() { 
     return this.myAnnotationClass; 
    } 
} 

我不知道如何初始化變量,或者我失蹤了。

謝謝你!編輯: 我不是那麼複雜一點。我需要這樣初始化它。

此外,我正在使用播放框架

+0

爲什麼不只是在沒有註釋的情況下初始化它?註釋真的在這裏添加了什麼? –

+0

您需要一些東西來處理註釋。這(與你提供的樣本相比)似乎要比自己做得更復雜。 – Savior

+1

你的問題不是很清楚。初始化哪個變量?你有幾個未初始化的變量。初始化與註釋有什麼關係? – regulus

回答

0

我們需要更多信息才能更好地幫助您。

一般來說,註釋可以在編譯期間從源代碼或編譯類處理,或者您可以在運行時處理它們。見RetentionPolicy

如果您需要在編譯過程中初始化它們,那麼你需要做的要麼:

  1. 解析的源代碼,重寫你的變量,然後編譯類。
  2. 如果你想修改.class文件,那麼你需要一個像ObjectWeb的javaassist或ASM庫。

在這兩種情況下,您都需要編寫一個註釋處理器。

在運行時,您可以使用反射初始化它們。這可能是最簡單的方法。