在“注释”中分配动态值

时间:2013-09-28 09:01:05

标签: java reflection

我有一个名为“InHouse”的自定义注释。

@Target(value = ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface InHouse {

public String[] parentClassNames() default {};
}

我将这个注释应用到我的POJO类中,如

public class Person{

    @InHouse(parentClassNames={"com.amar.Contact"})
    public Contact contact;
}

像这样我指定了我的注释。因此,当我指定一个值(parentClassNames)时,我硬编码了完全限定的类名,而不是像“Contact.class.getName()”那样访问。当我使用它时,我遇到了编译问题。那我怎么能实现这个......?

我想这样。

public class Person{

    @InHouse(parentClassNames={Contact.class.getName()})
    public Contact contact;
}

无论如何都要实现这个目标......?

1 个答案:

答案 0 :(得分:3)

这是不可能的,因为反射类名称在编译时是不可知的。 您可以尝试将注释值param类型更改为Class []。然后你可以按照自己的意愿使用它:

@Target(value = ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
@interface InHouse {

    public Class[] parentClassNames() default {};
}

public class Person{

    @InHouse(parentClassNames={Integer.class, String.class}) //Integer and String 
//are just as example, i know they are final and cant be parent classes :)
    public Contact contact;
}

稍后处理该注释时,从Class对象获取类名并不难。