2016-04-21 85 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库。

在这两种情况下,您都需要编写一个注释处理器。

在运行时,您可以使用反射初始化它们。这可能是最简单的方法。