我有一个名为“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;
}
无论如何都要实现这个目标......?
答案 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对象获取类名并不难。