java反射获得注释,如何在Java反射中获取注释值

本文介绍了如何在Java中获取并使用注解,通过示例展示了如何从Person类的方法中获取@NotNull和@MaxLength注解的值。在代码中,作者尝试遍历Person类的方法,查找以'get'开头的方法,并打印其对应的注解值,但原始代码存在错误。修正后的代码正确地获取并打印了注解的值。
摘要由CSDN通过智能技术生成

I have class Person:

@Retention(RetentionPolicy.RUNTIME)

@interface MaxLength {

int length();

}

@Retention(RetentionPolicy.RUNTIME)

@interface NotNull {

}

public class Person {

private int age;

private String name;

public Person(int age, String name) {

this.age = age;

this.name = name;

}

@NotNull

public int getAge() {

return this.age;

}

@MaxLength(length = 3)

public String getName() {

return this.name;

}

}

Then I'm trying to print annotation values of methods of Peson object.

for (Method method : o.getClass().getDeclaredMethods()) {

if (method.getName().startsWith("get")) {

Annotation[] annotations = method.getDeclaredAnnotations();

for (Annotation a : annotations) {

Annotation annotation = method.getAnnotation(a.getClass());

System.out.println(method.getName().substring(3) + " " +

annotation);

}

}

}

I want it to print annotation values, but it prints null. I m not quite understand what am I doing wrong.

解决方案

You have to access the annotations as shown below. Have modified the code a bit:

Person personobject = new Person(6, "Test");

MaxLength maxLengthAnnotation;

Method[] methods = personobject.getClass().getDeclaredMethods();

for (Method method : methods) {

if (method.getName().startsWith("get")) {

// check added to avoid run time exception

if(method.isAnnotationPresent(MaxLength.class)) {

maxLengthAnnotation = method.getAnnotation(MaxLength.class);

System.out.println(method.getName().substring(3) + " " + maxLengthAnnotation.length());

};

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值