Вопрос по java – Как получить доступ к полям, определенным в пользовательских аннотациях в Java

4

У меня есть следующий код Java -

import java.lang.reflect.Field;

public class AnnotationTest
{
    public @interface Size
    {
        int size();
        int location();
    }

    @Size(size = 40, location = 85)
    private String firstName;

    @Size(size = 1, location = 21)
    private String middleInitial;

    @Size(size = 50, location = 115)
    private String lastName;

    public static void main(String[] args)
    {
        AnnotationTest t = new AnnotationTest();

        Class<? extends AnnotationTest> classInstance = t.getClass();

        for (Field f : classInstance.getDeclaredFields())
        {
            Size s = f.getAnnotation(Size.class); 
            int size = s.size(); // this is line 29
            int location = s.location();

            System.out.println("size = "+ size);
            System.out.println("location = "+location);
        }

    }
}

Я получаю ошибку

Exception in thread "main" java.lang.NullPointerException
    at com.stackoverflowx.AnnotationTest.main(Demo.java:125

Как правильно получить доступ к полям аннотации?

Ваш Ответ

1   ответ
10

ить@Retention(RetentionPolicy.RUNTIME) в ваше определение аннотации, чтобы сделать его доступным для обработки во время выполнения. Например:

@Retention(RetentionPolicy.RUNTIME)
public @interface Size {

На практике вы также должны проверить, действительно ли поле имеет данную аннотацию сField.isAnnotationPresent прежде чем пытаться получить аннотацию с поля.

Кроме того, также полезно указывать, к каким типам элементов относится ваша аннотация.@Target, Таким образом, ваш пример будет:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Size {
Хорошо, я понимаю. Благодарю. CodeBlue
Ну, я бы сказал, что проблема была в том, что ваша аннотация не существовала в отношении JVM. Это имеет мало общего с отражением как таковым.
Отлично. Благодарю. Таким образом, проблема была отражением. CodeBlue

Похожие вопросы