Java 反射Api

Annotation:表示注解


AnnotatedElement:表示被注解的元素,所以不是注解。如Class、Constructor、Field、Method、Package。
GenericArrayType:表示数组类型
GenericDeclaration:声明类型变量的所有实体的公共接口
InvocationHandler:是代理实例的调用处理程序实现的接口。(真难理解/(ㄒoㄒ)/~~)
Member:成员(包括字段,方法和构造方法)
ParameterizedType:表示参数化类型
Type:是所有类型的公共接口
TypeVariable:各种类型变量的公共高级接口
WildcardType:表示通配符类型表达式,如?、?extends Number或? super Integer。

AccessibleObject:是Field、Method和Constructor对象的基类
Array:是一个工具类,提供了动态创建和访问Java数组的方法
Constructor: 提供了关于类的单个构造方法的信息以及对它的访问权限
Field
Method
Modifier
Proxy:提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
ReflectPermission:反射操作的Permission



AnnotatedElement接口是所有程序元素的父接口,所以程序通过反射获取了某个类的AnnotatedElement对象后,程序就可以调用该对象的方法来访问Annotation信息。

getAnnotation(Class): 返回程序元素上存在的、指定类型的注解。
getAnnotations():所有注解
getDeclaredAnnotations():返回自己的所有注解,不包括继承过来的。

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitName {
    String value() default "";
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
    public enum Color{ BULE,RED,GREEN};

    Color fruitColor() default Color.GREEN;
}

Modifier:

native transient volatile synchronized final static protected private public
0 0 0 0 0 0 0 0 0 0
public class MyTest {
    public int a;
    public static int b;
    public static final int c = 0;
    private int d;
}


///////////////////////////////
    public static void main(String[] args) {

        Class<?> clazz = MyTest.class;
        Field[] fields = clazz.getDeclaredFields();

        for (Field field : fields) {

            String name = field.getName();
            int modifierValue = field.getModifiers();
            String modifierStr = Modifier.toString(field.getModifiers());

            String msg = String.format("%s: 0x%08x -> %s", name, modifierValue, modifierStr);

            System.out.println(msg);
        }
    }
a: 0x00000001 -> public
b: 0x00000009 -> public static
c: 0x00000019 -> public static final
d: 0x00000002 -> private

Modifier.isPublic(field.getModifiers());
Modifier.isAbstract(field.getModifiers());

打赏