反射目录,重点的顶层接口
1. 顶层接口
1.1 概述(重点)
理解顶层接口方便我们对反射建立一个全局的认识,这对实战写代码有很大的帮助,顶层接口对应着一些特定的概念,针对这些概念给出了特定的行为(方法),只要子类实现了接口,那么子类也会具有接口的行为。所以只要我们理解了顶层接口的行为(方法),那么底层实现类也就理解了,建议多花点时间记住这些顶层接口。
1.2 Member
类的成员变量接口,类的成员变量指的是构造函数、字段、方法,Member
可以获取成员变量的名字、成员变量所属的类、成员变量的修饰符。
方法 | 解释 |
---|---|
Class<?> getDeclaringClass() | 返回当前成员对象声明的地方,比如A类中有一个方法aMethod,那我就可以通过getDeclaringClass 方法获取到aMethod所属的类A |
String getName() | 返回成员的名字 |
int getModifiers() | 返回成员的修饰符,修饰符有public |protected |private |abstract |static |final |transient |synchronized |native | strictfp |interface |
boolean isSynthetic() | 如果此成员是由编译器引入的,则返回true;否则返回false。 |
Member
的具体实现类,代表着字段、方法、构造函数实现了上面罗列的方法
- Method
- Field
- Constructor
代码,下面只拿Field
举个例子,Method和Constructor的写法跟Field
一毛一样
public class MemberDome {
private String msg;
public static void main(String[] args) {
try {
Class<MemberDome> memberDomeClass = MemberDome.class;
System.out.println("msg字段:" + memberDomeClass.getDeclaredField("msg"));
System.out.println("msg字段的修饰符:" + Modifier.toString(memberDomeClass.getDeclaredField("msg").getModifiers()));
System.out.println("msg字段isSynthetic:" + memberDomeClass.getDeclaredField("msg").isSynthetic());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果
msg字段:private java.lang.String com.example.demo.reflect.MemberDome.msg
msg字段的修饰符:private
msg字段isSynthetic:false
1.3 AnnotatedElement
可以被注解注释的元素(常见的元素有类型、字段、方法、构造函数),这些元素可以通过反射获取到注解。
方法 | 解释 |
---|---|
default boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) | 判断该程序元素上是否包含指定类型的注解,存在则返回 |