2013-09-28 2 views
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; 
} 

Есть ли все равно, чтобы достичь этого ...?

ответ

3

Это невозможно, потому что имена классов отражения не могут быть известны во время компиляции. Вы можете попытаться изменить тип параметра значения аннотации для класса []. После этого вы можете использовать его, как вы хотите:

@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; 
} 

Это не трудно получить имя класса из объекта класса, когда вы будете обрабатывать эту аннотацию позже.

Смежные вопросы