java - 如何在对象java中获取注解

标签 java annotations

我正在按照一种逻辑工作,但我不知道是否可以这样做,我想为此使用注释,所以这是我的代码

public class Hola {
    public JSONConverter() {
        String message=  getClass().getAnnotation(HolaAn.class).getMessage();

    }
}


@Target({ElementType.FIELD})
public @interface HolaAn{

    String getMessage();
}




public class MessageTest{

@HolaAn(getMessage= "MUNDO")
private Hola hola;

    @Test
    public void testMessage(){
        hola= new Hola();

    }


}

但是我有 nullPointerException,我不太清楚如何使用我自己的注释,如果可能的话,有人可以告诉我如何做吗?

最佳答案

首先,您需要将注释保留更改为RUNTIME(默认为CLASS),so they may be read reflectively .改成这样:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface HolaAn {

    String message();

}

您正在尝试从类中获取注解,但您的注解在一个字段上,它是唯一的元素目标。在此示例中,您可以通过以下方式获取注释:

@HolaAn(message = "MUNDO")
private Hola hola;

@Test
public void testMessageOnField() {
    final Field[] fields = HolaTest.class.getDeclaredFields();
    for (final Field field : fields) {
        if (field.isAnnotationPresent(HolaAn.class)) {
            final HolaAn annotation = field.getAnnotation(HolaAn.class);
            Assert.assertTrue(annotation.message().equals("MUNDO"));
        }
    }
}

如果需要从类中获取注解,改成这样:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface HolaAn {

    String message();

}

然后,你就可以得到这样的注释消息:

@HolaAn(message = "CLASS")
public class Hola {

    public Hola() {
        final String message = this.getClass().getAnnotation(HolaAn.class).message();
        System.out.println(message);
    }

}

@Test
public void testMessage() {
    hola = new Hola();
}

或者:

@Test
public void testMessageSecondWay() {
    hola = new Hola();
    final Class<?> theClass = hola.getClass();
    if (theClass.isAnnotationPresent(HolaAn.class)) {
        final HolaAn annotation = theClass.getAnnotation(HolaAn.class);
        Assert.assertTrue(annotation.message().equals("CLASS"));
    }
}

关于java - 如何在对象java中获取注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562284/

相关文章:

java - 未知错误 - bundle 字符串数组

java.lang.classnotfoundexception org.springframework.web.servlet.dispatcherservlet

java - JTable rowCount问题

java - 我可以将 hibernate 实体注释与 bean 验证一起使用吗

java - ORMlite,如果我*删除*注释会更快吗?

java - Kafka 生产者配置 metadata.broker.list 和 url

java - 在 Java 中在另一个更大的数组中查找一个数组

PDF规范与Acrobat创作(QuadPoints)

Symfony 4注释路由不起作用

java - 如何在 JSON 响应中仅获取实体 ID 而不是整个实体