method.getdefaultvalue()仅适用于注解类型的方法,需满足method.getdeclaringclass().isannotation()为true且方法声明了default值,否则返回null或抛出illegalargumentexception。

Method.getDefaultValue() 是 Java 反射中用于获取注解(Annotation)中某个方法(即注解成员)默认值的 API,但它**只有在该 Method 对象代表的是注解类型中的方法、且调用时当前类加载器能正确解析该注解定义的前提下,才能返回正确的默认值**;否则会返回 null。
前提:必须是注解类型的方法
只有通过 Class.getAnnotationsByType() 或 Class.getAnnotation() 获取到注解实例后,再用 annotation.annotationType().getMethod("xxx") 得到的 Method 对象,才可安全调用 getDefaultValues()。直接对普通接口或类里的方法调用会抛出 IllegalArgumentException 或返回 null。
调用方式与注意事项
- 确保方法属于注解类型:
method.getDeclaringClass().isAnnotation()应为true - 方法必须有
@Default(即源码中写了default xxx),否则getDefaultValues()返回null - 返回值类型需与注解成员声明一致(如
String、int、枚举、其他注解类型、数组等),原始类型会自动装箱 - 若默认值是空数组(如
String[] value() default {};),返回的是长度为 0 的对应数组
一个典型例子
假设有注解:
@interface MyAnno {
String name() default "unknown";
int age() default 18;
String[] tags() default {};
}
获取默认值:
Method nameMethod = MyAnno.class.getMethod("name");
Method ageMethod = MyAnno.class.getMethod("age");
Method tagsMethod = MyAnno.class.getMethod("tags");
System.out.println(nameMethod.getDefaultValue()); // "unknown"
System.out.println(ageMethod.getDefaultValue()); // 18
System.out.println(tagsMethod.getDefaultValue()); // [](空字符串数组)
常见陷阱
- 对非注解类的方法调用
getDefaultValues()→ 抛出IllegalArgumentException - 反射获取方法时拼写错误(如大小写、参数列表不匹配)→
NoSuchMethodException - 在运行时动态生成的注解(如某些代理或字节码增强场景)可能无法正确解析默认值
- 泛型类型、嵌套注解的默认值也能获取,但需注意类型擦除影响(如
List<string></string>默认值无法保留泛型信息)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











