type
status
date
slug
summary
tags
category
icon
password
关于反射原理性的知识可以看看类加载流程,对象实例化流程相关的文章,这里说一下反射的常用使用方法。
获取Class
- Class.forName
- ClassA.class
- classA.getClass
Class常见方法
- isPrimitive()
是否为基础类型,如int,long,byte,boolean,char,short,double等
- getFiled()
返回所有public成员变量的field对象,包括从父类继承的field对象
- getDeclaredField()
返回当前类本身所有的field,包括private的field,但是不包括从父类继承的
- getMethods()/getMethod()/getDeclaredField()
与上面的Field相同
getMethods()返回类的所有public方法
public Method getMethod(String name, Class<?>... parameterTypes)
后面传的是参数的类型
- getConstructors()/ getConstructor(Class<?>... parameterTypes)/getDeclaredConstructors()/getDeclaredConstructor()
获取构造方法
Field常用方法
- get(Object obj)
获取Filed的值,如果不是静态字段,需要传入类的对象,如果是静态字段,传入null或者任何对象都可以.
- set(Object obj, Object value)
将Object的这个Filed的值设置成value
- setAccessible(true)
修改之前设置Field可以被访问
- getType()
返回Filed 的类型class,如果属性是泛型,这个方法只能获取到接口类型,即HashMap<K,V>,只能获取到HashMap
- getGenericType()
返回属性声明的Type对象,如果是泛型,可以获取到具体的参数类型,不如HashMap<K,V>
- getName()
获取Field声明的时候的名字
- getAnnotations()/getDeclearedAnnotation()/getAnnotation()
获取这个Field上的注解
- getModifiers()
获取Filed上的修饰符,返回的是一个int,需要使用
Modifier
类才能知道具体的修饰符是什么(public,private,static,final等)- isEnumConstant()
判断这个Field是否为枚举类型
- isSynthetic()
判断这个Filed是否为复合类型,即是否为编译期自动生成的Field
Method常用方法
- invoke(Object obj, Object... args)
执行该Method,obj是对象(如果是静态方法可以直接传null),args是入参,这个方法返回值总是对象,如果是基本类型,则返回包装类型,比如int返回Integer.
Constructor
- newInstance(Object ... initargs)
通过构造方法创建对象,传入的参数是构造方法的参数.
Class.newInstance()
也可以用来创建对象,它获取的是类的默认构造方法(无参),并存在缓存机制保存实例对象.Array
反射包中也有一个Array.
- 创建数组
newInstance()
- setXX
- getXX
- getLength()
- 作者:姜康
- 链接:https://jiangkang.tech/article/c3ebbe09-d80d-4a9b-a8da-dfbaaa637733
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章