0

我有一个名为“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;
}

有没有办法做到这一点......?

4

1 回答 1

3

这是不可能的,因为在编译时无法知道反射类名称。您可以尝试将注释值参数类型更改为 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 对象中获取类名并不难。

于 2013-09-28T09:13:33.407 回答